我有一个包含以下表和关系的数据库: 发票,订单和产品 每个因子都有几个订单,每个订单都指向一个产品。
发票型号:
class Invoice extends Model
{
public function orders()
{
return $this->hasMany(Order::class);
}
}
订单模型:
class order extends Model
{
public function invoice()
{
return $this->belongsTo(Invoice::class);
}
public function product()
{
return $this->belongsTo('App\Product');
}
}
产品型号:
class product extends Model
{
public function orders()
{
return $this->belongsToMany(Order::class);
}
}
每个订单的名称是产品ID的外键
$table->unsignedBigInteger('name')->references('id')->on('products')->default(0);
在我的模板中,我可以显示带有以下订单的发票:
{{$invoice->title}}
{{$invoice->client_address}}
@foreach($invoice->orders as $order)
{{$order->name}}
${{$order->price}}
{{$order->qty}}
${{$order->qty * $order->price}}
@endforeach
具有以下功能:
public function show($id)
{
$invoice = Invoice::with('orders')->findOrFail($id);
return view('admin.invoice.show.main', compact('invoice'));
}
如何在订单记录中显示产品名称,如下所示:
{{$order->product->name}}
我在单循环中使用了before(例如,产品和类别) 但是在此示例中,我们具有3关系并且之前使用了紧凑方法。
我的产品表是:
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('desc');
$table->string('price');
$table->string('image');
$table->string('count');
$table->string('status');
$table->unsignedBigInteger('category_id')->default(0);
$table->foreign('category_id')->references('id')->on('categories');
$table->timestamps();
});
答案 0 :(得分:0)
尝试一下
$invoice = Invoice::with('orders.product')->findOrFail($id);
您可以使用类似的方式访问
@foreach($invoice->orders as $order)
..
{{ $order->product->name }}
..
@endforeach
答案 1 :(得分:0)
我认为您的关系有误...每种产品都可以在几个订单之内..所以:
产品型号:
class product extends Model
{
public function orders()
{
return $this->belongsToMany('App\Order');
}
}
订单模型:
class order extends Model
{
public function product()
{
return $this->hasOne('App\Product');
}
}
对吗?
然后访问:
$invoices = Invoice::with('orders.product')->get();