2

所以, anorder有一个 foreign_key offer_id

并且 anoffer有一个 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);
}
4

3 回答 3

1

如果食物是指订单中的物品,那么:

$orders = Auth::user()->orders()
            ->with('offer', 'offer.orders', 'offer.item')
            ->get();
于 2019-02-15T01:14:16.670 回答
1

Laravel 渴望加载

在此之下,您会发现嵌套的急切加载:

要急切加载嵌套关系,您可以使用“点”语法。例如,让我们在一个 Eloquent 语句中急切地加载本书的所有作者和作者的所有个人联系人:

$books = App\Book::with('author.contacts')->get();

在您的情况下,我们可以使用关系之间的点表示法来获得嵌套的。

$orders = Auth::user()->orders()
            ->with(['offer', 'offer.item'])
            ->get();
于 2019-02-15T01:17:41.650 回答
0

@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);
}
于 2019-02-15T02:05:43.587 回答