1

laravel の雄弁な関係で遊んでいます。私はこれらの関係を持っています。

注文:

id
id_customer

Order.php

public function orderDetails(){
    return $this->hasMany('App\OrderDetail', 'order_id');
}

注文詳細

id
order_id
product_id
quantity

OrderDetail モデル

 public function product()
{
   return $this->hasMany('App\Product', 'id', 'id');
}

public function order(){
  return $this->belongsTo('App\Order', 'order_id', 'id');
}

製品

id name price

dd'ed dd($this->order->with('orderDetails')->get(); の場合

注文の詳細に含まれる製品のIDを使用して、注文と注文の詳細を取得できます。しかし、表示できるように製品の名前を取得できるようにしたいです。

どのクエリを実行するか、または関係を定義するためのより良い方法は?

4

2 に答える 2

3

ネストされた熱心な読み込みを使用します。

$this->order->with('orderDetails', 'orderDetails.product')->get();

関係は である必要がありますがbelongsTo()、 ではありませんhasMany():

public function product()
{
    return $this->belongsTo('App\Product', 'product_id', 'id');
}

また、ここでは多対多の関係を使用できます。ただし、それが適切な場合に限ります。

于 2017-01-04T17:14:01.793 に答える
2

この質問を参照として参照するすべての人のために、関係の提案を求めているので、これを達成する方法と私の意見を次に示します。

その実際の製品は多くの注文に属し、注文は多くの製品に属しています。注文の詳細がピボットであることがわかりました。必要に応じて、そのモデルも作成できます。

productsテーブル

id
customer_id

Product.php

public function orders()
{
    return $this->belongsToMany(Order::class, 'order_details', 'order_id', 'product_id')->withPivot('quantity');
}

ordersテーブル

id
name
price

Order.php

public function products()
{
    return $this->belongsToMany(Product::class, 'order_details', 'product_id', 'order_id')->withPivot('quantity');
}

OrderDetailテーブルへの確実な参照がないため、作成できない場合があります。ちょうどorder_detailsテーブル

id
order_id
product_id
quantity

しかし、ここで OrderDetail モデルを作成するとしたら、次のようになります

public function products()
{
    return $this->hasMany(Product::class, 'product_id');
}

public function orders()
{
    return $this->hasMany(Order::class, 'order_id');
}
于 2017-01-04T17:41:37.590 に答える