因此,订单
有一个foreign_key offer_id
。
并且offer
有一个foreign_key item_id
。
同一个商品可能包含在多个优惠中。但每个报价都有一个项目。
一个报价可以包含在多个订单中。但每个订单都有一个报价。
当我这样做时:
$orders = Auth::user()->orders()
->with('offer')
->get();
我明白了:
id: 3,
user_id: 1,
offer_id: 5,
created_at: "2019-02-15 00:40:31",
updated_at: "2019-02-15 00:40:31",
offer: {
id: 5,
item_id: 3,
created_at: "2019-02-15 00:39:40",
updated_at: "2019-02-15 00:39:40"
}
如您所见,我可以获得此优惠的 item_id: 3
但我想得到整个项目;它的所有列,而不仅仅是 id。
通常,您会连接这两个表。 如何使用 Eloquent 做到这一点?
以下是我的 Eloquent 关系:
订单
public function offer()
{
return $this->belongsTo(Offer::class);
}
优惠
public function orders()
{
return $this->hasMany(Order::class);
}
public function item()
{
return $this->hasOne(Item::class);
}
项目
public function offers()
{
return $this->belongsToMany(Offer::class);
}
最佳答案
在此之下,您会发现嵌套的预加载:
To eager load nested relationships, you may use "dot" syntax. For example, let's eager load all of the book's authors and all of the author's personal contacts in one Eloquent statement:
$books = App\Book::with('author.contacts')->get();
就您而言,我们可以使用关系之间的点表示法来获得嵌套的。
$orders = Auth::user()->orders()
->with(['offer', 'offer.item'])
->get();
关于laravel - 如何通过 Laravel 的 Eloquent 关系和预加载连接 3 个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54701380/