laravel 如何处理尚不存在外来ID

voj3qocg  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(134)

在我的餐馆订购网站中,我的orderitems表有一个外键order_id。问题是订单只有在用户确认他们的orderitems之后才存在,这意味着我的order_id值将不引用任何内容,直到订单被记录。我做了一个临时修复,但非常糟糕。我如何解决这个问题?
我的订单控制器. php

public function storeOrderitem(Request $request, Menu $menu)
        $order_id = rand(1, 1000);

        $attributes = $request->validate([
            'quantity' => 'integer|min:1',
        ]); 

        $orderitem = new Orderitem;
        $orderitem->order_id = $order_id;
        $orderitem->menu_id = $menu->id;
        $orderitem->quantity = $attributes['quantity'];
        $orderitem->save();

        $orderitems = Orderitem::with('menu')->get();
        session(['orderitems' => $orderitems]);
        return redirect('/');
    }

    public function show(Menu $menu)
    {
        return view('pages.order', [
            'menu' => $menu,
        ]);
    }

我的菜单控制器. php

public function show(Menu $menu)//: Response
{
    //

    //dd($menu);
    $orderitems = session('orderitems');
    return view('pages/landing-page', [
        'menus' => Menu::latest()->get(),
        'orderitems' => $orderitems
    ]) ;
}

这是我的观点,mainpage.blade.php

@foreach($orderitems as $orderitem)
      <li class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100">{{ $orderitem->menu->item_name }}<span class="ml-32">{{ $orderitem->menu->price }}</span></li>
@endforeach

如果你需要看其他的文件,就告诉我

q3qa4bjr

q3qa4bjr1#

问题是没有订单,为什么需要存储订单项目?
因此,我认为Order和OrderItem模型应该一起更新,要么在创建订单之后更新订单关系,要么使用模型观察器创建OrderItems。
因此,在我看来,它将假设以下是您的模型的结构

Order
id
customer_id
created_at
updated_at
status
etc ....

以及

OrderItem
id
product_id
order_id
quantity
price
etc..

订单项将在订单创建后立即更新,要在购物车中显示,您可以将选择保留在会话本身或缓存或任何临时内存/数据库表中,一旦取消或订单履行或具有一定时间限制,这些表将被清除。

相关问题