I'm still teaching myself laravel. I'm making an order form in laravel and i have a table full of products and i want to make it so that when make a new order and add the products. It would make its own order when i click new order it will make a new order number up and save it to the database?
Would the best way be to make an orders table with
Schema::create('westcoOrders', function (Blueprint $table){
$table->increments('id');
$table->string('orderNumber');
$table->json('content');
$table->tinyInteger('sent')->default(0);
$table->tinyInteger('delivered')->default(0);
$table->timestamps();
} );
or would it be better having a table multiple tables so i have one like the one above without the json entry and then have a westcoOrderItems table like this?
Schema::create('westcoOrderItems', function (Blueprint $table){
$table->string('orderNumber');
$table->string('quantity');
$table->string('productName');
$table->string('productCode');
$table->string('price');
$table->timestamps();
} );
}
So then i have link the order number to the other table. Or is that a long way to go around it? and if i do it that way i will have to find a way to make an order number when i hit the new order route?
I feel like I'm doing this the wrong/long way?
In my opinion, something like the following would be better:
// For orders
Schema::create('orders', function (Blueprint $table){
$table->increments('id');
$table->tinyInteger('is_delivered')->default(0);
$table->tinyInteger('is_paid')->default(0);
$table->timestamps();
});
// For ordered_items (one order may contain many products/ordered_items)
Schema::create('ordered_items', function (Blueprint $table){
$table->increments('id')->unsigned();
$table->integer('order_id')->unsigned(); // fk for order.id
$table->string('quantity')->unsigned();
$table->string('productName');
$table->string('productCode');
$table->decimal('price', 10, 2);
});
Then the models, for example:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Order extends Model {
public function items()
{
return $this->hasMany('Item::class');
}
}
The Item
class for ordered_items
:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model {
protected $table = 'ordered_items';
public function order()
{
return $this->belongsTo(Order::class);
}
}
Hope you got the idea. This is the simplest one.