laravel - 如何通过 Laravel 的 Eloquent 关系和预加载连接 3 个表?

标签 laravel eloquent eager-loading laravel-5.7 eloquent-relationship

因此,订单有一个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);
}

最佳答案

Laravel Eager Loading

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

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/

相关文章:

php - 使用 Laravel 和 Passport 在身份验证失败时响应状态码 401?

php - 空格自动添加输入php

laravel - 我使用了 laravel 分页链接,但我得到了很大的 icos。 <>调用tailwind css代码

laravel - 使用 select() 自定义 hasMany 关系查询

laravel-5.4 - laravel hydrateRaw/fromQuery 和带分页的预加载

css - 找不到 Laravel Bootstrap 文件

php - Laravel Eloquent 5 表

php - 在 Laravel 中将数组转换为 Eloquent 模型

php - Laravel eager load 功能限制

ruby-on-rails - Rails中ActiveModel实例上的热切加载关联