我正在尝试创建购物车页面。从控制器我得到了一个数组的订单项目。订单项目有外键“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和meals和hope数组,这个序列是相等的......或者我可以发送一个带有联合表的数组。但是没有更简单的方法来做到这一点吗?
2条答案
按热度按时间ru9i0ody1#
您需要定义模型之间的关系,以便可以通过Eloquent ORM进行访问,并能够在刀片模板中执行类似操作,例如:
您可以阅读有关Laravel关系以及如何设置每种类型的关系here的更多信息
zed5wv102#
你不能在视图文件中插入数据库,这既不是干净的代码,也不是有用的,它会导致一个叫做N+1问题的问题,解决方案是在模型类中创建一个关系,你可以在www.example.com找到更多关于关系的信息laravel.com,无论如何,这里有一个例子:首先要在
Order
模型中创建一个名为meals
的方法,然后您需要选择应该使用哪个关系,在您的示例中,该关系是has many,因为Meal有许多订单项,所以在meal方法中使用如下:return $this->belongsTo(Order::class)
。要了解更多示例,我真的建议您查看laravel.com上的Eloquent Relationships,他们有一个很棒的文档来简化这些事情,在创建关系之后,在将$order_items
传递到视图之前,您应该加载关系,类似于以下内容:Order::with('meal')->get()
或者如果你已经有了一个示例,你可以使用$orders->load('meal')
,有几种方法来调用一个关系,但是不管你怎么做,试着在视图部分之外或者在blade内部的任何循环中做