【发布时间】:2019-03-01 18:29:20
【问题描述】:
您好,需要您的帮助。我无法在订单视图中显示订单商品。我正在使用 belongsToMany 关系。
订单模式
public function orderitems()
{
return $this->belongsToMany('App\Orderitems', 'id', 'order_id')->orderBy('created_at', 'DESC');
// return $this->belongsToMany(Orderitems::class)->orderBy('created_at', 'DESC');
}
订单项模型
public function orders()
{
return $this->belongsToMany('App\Orders', 'id','order_id');
}
秀剑
@foreach($orders->orderitems as $orderitem)
<tr>
<td>{{ $orderitem->product_code }}</td>
<td>{{ $orderitem->product_name }}</td>
<td>{{ $orderitem->quantity }}</td>
<td>{{ $orderitem->total_cost }}</td>
</tr>
@endforeach
订单控制器
public function show($id)
{
$orders = Orders::find($id);
return view('orders.show')->with('orders', $orders);
}
希望你能帮助我。非常感谢您!
更新 我改变了关系,而不是多对多,我使用 一对多 意识到许多项目只有一个订单,我遵循@Tim 的约定。这是我的模型和控制器的样子
订单模型
public function orderItems()
{
return $this->hasMany('App\Orderitems', 'id', 'order_id')->orderBy('created_at', 'DESC');
}
订单项模型
public function orders()
{
return $this->belongsTo('App\Orders','id','order_id');
}
控制器
public function show($id)
{
$order = Orders::find($id);
$orderItems = $order->orderItems;
dd($order->orderitems);
Log::info($order);
var_dump($order);
}
【问题讨论】:
-
这么多约定问题...模型名称是单数的,
Order,而不是Orders,变量名称应该是$order,因为::find()返回单个订单,而不是多个,关系是通常是camelCaseorderItems()或snake_caseorder_items()等。话虽如此,请尝试在您的控制器中运行dd($orders->orderitems)以查看是否实际附加了订单项。 -
我怀疑这里可能存在两个主要问题:1)
belongsToMany不是您要实现的层次结构的正确关系类型; 2)order_id被设置为你最终的belongsToMany两边的第一个外键,导致矛盾两者都会导致返回一个空数组。再次检查您的数据库关系结构。 -
嗨@TimLewis 我刚刚采纳了你的建议。它给了我这个错误,--- SQLSTATE[42S02]: Base table or view not found: 1146 Table 'brandexpertpos.id' doesn't exist (SQL: select
order_items.*,id.order_idaspivot_order_id,id.orderitems_idaspivot_orderitems_idfromorder_itemsinner joinidonorder_items.id=id.orderitems_idorderitems_idwhere @986545.@2按created_atdesc 订购)(查看:E:\wamp64\www\brandExpertPOS\resources\views\orders\show.blade.php) -
嗨@D.Petrov 你有什么建议?
-
是的,我错了,对不起,我的错,嗯,你不认为在逆关系 orderitems 中这应该切换
'id','order_id'吗?我认为蒂姆刘易斯在公约问题上是正确的......
标签: laravel