我有下表:
订单:ID等...
order_lines :id,order_id,product_id等...
产品:ID,名称等...
定义了外键。
我的Laravel模型定义为:
feof
class Order
public function orderLine()
{
return $this->hasMany('App\OrderLine');
}
class OrderLine
public function order()
{
return $this->belongsTo('App\Order');
}
public function product()
{
return $this->belongsTo('App\Product');
}
我尝试了很多事情,但是没有任何效果。这对我来说是最好的解决方案,但是它不起作用。
class Product
public function orderLine()
{
return $this->hasMany('App\OrderLine');
}
我很难在视图中显示以下数据:
class OrderController
public function show($id)
{
$user = Auth::user();
$order = Order::where('user_id', '=', $user->id)->with(['orderLine.product'])->findOrFail($id);
return view('layouts/order/index', compact('order'));
}
产品对象未加载。我想在上面的循环中显示产品名称。
答案 0 :(得分:2)
尝试这样做:
public function show($id)
{
$user = Auth::user();
$order = Order::with(['orderLines', 'orderLines.product'])
->where('user_id', '=', $user->id)
->findOrFail($id);
return view('layouts/order/index', compact('order'));
}
class OrderLine
public function order()
{
return $this->belongsTo(\App\Order::class, 'order_id');
}
public function product()
{
return $this->belongsTo(\App\Product::class, 'product_id');
}
class Order
public function orderLines()
{
return $this->hasMany(\App\OrderLine::class);
}
将orderLine
的名称更改为orderLines
,因为订单有很多orderLines。
在您的刀片中:
@foreach($order->orderLines as $orderLine)
<tr>
<td>{{$orderLine['product']->title}}</td>
<tr>
@endforeach
答案 1 :(得分:0)
你好,Dezaley,欢迎您来StackOverflow! 让我们调查您的问题。 据我所知,您选择的模型是错误的。让我来帮助您
$order = Order::where(['id' => $id, 'user_id' => $user->id])->with('orderLine.product')->firstOrFail();
答案 2 :(得分:0)
非常热心帮助我的mare96的答案正在起作用。但是,我发现有东西。
您可以实施为(mare96解决方案)
public function show($id)
{
$user = Auth::user();
$order = Order::with(['orderLines', 'orderLines.product'])
->where('user_id', '=', $user->id)
->findOrFail($id);
return view('layouts/order/index', compact('order'));
}
@foreach($order->orderLines as $orderLine)
<tr>
<td>{{$orderLine['product']->title}}</td>
<tr>
@endforeach
在视图中,我不喜欢数组语法“ $ orderLine ['product']-> title”。以下不带数组的解决方案也有效。
解决方案如下:
public function show($id)
{
$user = Auth::user();
$order = Order::with('orderLines', 'orderLines.product')
->where('user_id', '=', $user->id)
->findOrFail($id);
return view('layouts/order/index', compact('order'));
}
@foreach($order->orderLines as $orderLine)
<tr>
<td>{{$orderLine->product->title}}</td>
<tr>
@endforeach
实际上,我的问题是产品在模型中定义为null,因此视图中Product始终为null。
Class OrderLine extends Model {
public $product = null
我删除了“ public $ product = null”行,它按预期工作。感谢帮助我的人们。
答案 3 :(得分:0)
尝试一下-
@foreach($order as $ordr)
<tr>
<td>{{$ordr->product_id->name}}</td>
<tr>
@endforeach