我在尝试创建购物车页面。从控制器,我得到了一系列的订单项目。订单项目有外键"meal_id“-与餐桌餐的关系。我需要访问连接的餐饮对象,以显示信息。我该如何正确地做这件事?我试图在刀片模板中包含php密钥:
@foreach($order_items as $order_item)
...
@php
$meal = \App\Models\Meal::where('id', '=', $order_item->meal_id)->get();
@endphp
...
@endforeach但不起作用。当然,我可以发送两个不同的数组的order_items和膳食,并希望,该序列将是平等的.或者我可以以某种方式发送一个带有联合表的数组。但难道没有更简单的方法来做到这一点吗?
发布于 2022-11-13 16:20:52
您需要定义模型之间的关系,这样您就可以通过雄辩的ORM访问它,并且可以在刀片模板中执行类似的操作,例如:
$order_item->meals;您可以阅读更多关于Laravel关系以及如何设置每种关系这里的内容。
发布于 2022-11-13 17:23:47
您不能在视图文件中使用数据库,这既不是干净的代码,也不是有用的,它导致了一个名为N+1问题的问题,解决方案是在模型类内创建一个关系,您可以在laravel.com中找到更多关于关系的信息,无论如何,这里有一个示例:首先在Order模型中创建一个名为meals的方法,然后您需要选择您应该使用的关系,在您的情况下,关系有很多,因为餐中有很多订单项,所以在餐方法中使用如下:return $this->belongsTo(Order::class)。关于更多的例子,我建议您在laravel.com上看到有说服力的关系--它们有一个很好的文档来简化这些事情,在创建关系之后,在将$order_items传递到视图之前,您应该加载关系,有些是这样的:Order::with('meal')->get()或者如果您已经有了一个实例化,您可以使用$orders->load('meal'),这是几种调用关系的方法,但无论如何,请尝试在视图部分或任何内部循环之外执行该关系。
https://stackoverflow.com/questions/74422555
复制相似问题