How do I fill order id when creating orders and orderitems table with 1 form?

Viewed 190

How do I fill order id when creating orders and orderitems table with 1 form ?

I make order management system by laravel.

When user submit form of order it will create orders and orderitems table where orderitems table has 1 column named order_id. I do not understand how I fill order_id in orderitems table.

This is my OrderController

public function store(Request $request)
{
    $order = Order::create([
        'user_id' => $request->input('user_id'),
    ]);

    $orderitem = Orderitem::create([
        'order_id' => $request->input('order_id'),
        'product_id' => $request->input('product_id'),
        'quantity' => $request->input('quantity'),
    ]);

    return redirect()->route('orders.index');
}
2 Answers

First of all create a relationships in both model. In the Order model create a hasMany relation:

public function orderItems()
{
    return $this->hasMany(OrderItem::class, 'order_id');
}

Then in OrderItem model create a reverse relation:

public function order()
{
    return $this->belongsTo(Order::class, 'order_id', 'id');
}

Then finally in the controller

$order = Order::create([
    'user_id' => $request->input('user_id'),
]);

$orderItems = $order->orderItems()->create([
    'product_id' => $request->input('product_id'),
    'quantity' => $request->input('quantity')
]);
public function store(Request $request)
{
    $order = Order::create([
        'user_id' => $request->input('user_id'),
    ]);

    $orderitem = Orderitem::create([
        'order_id' => $order->id,
        'product_id' => $request->input('product_id'),
        'quantity' => $request->input('quantity'),
    ]);

    return redirect()->route('orders.index');
}
Related