使用口才检索关系

时间:2019-04-03 10:18:09

标签: laravel laravel-5 eloquent

我有一个包含以下表和关系的数据库: 发票,订单和产品 每个因子都有几个订单,每个订单都指向一个产品。


发票型号:

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();
});

2 个答案:

答案 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();