如何将3个表与Laravel的雄辩关系和Eager Loading连接起来?

托尼

因此,anorder具有一个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做到这一点?

这是我雄辩的关系:

订购

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);
}
托尼

@MihirBhende和@swonder的答案都以正确的方式指出。

确实应该是:

$orders = Auth::user()->orders()
            ->with('venue')
            ->with('offer.item')
            ->get();

或(同一件事):

$orders = Auth::user()->orders()
            ->with(['venue', 'offer.food'])
            ->get();

但是OfferItem模型的关系应该颠倒:

提供

public function item()
{
    return $this->belongsTo(Item::class);
}

项目

public function offers()
{
    return $this->hasMany(Offer::class);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章