如何在 Laravel 中加载嵌套关系

Posted

技术标签:

【中文标题】如何在 Laravel 中加载嵌套关系【英文标题】:How to load a nested relationship in Laravel 【发布时间】:2018-06-03 01:39:00 【问题描述】:

我有一个名为 CallbackRequest 的模型,该模型与 Loan 模型有关系,这是 CallbackRequest 模型的唯一关系。

回调模型:

public function loan() 

    return $this->belongsTo(Loan::class);

现在 Loan 模型本身与称为申请人的第三个模型有关系。

贷款模式:

public function applicant() 

    return $this->belongsTo(Applicant::class);
 

我的观点:

当我加载 CallbackRequest 时,我用它来急切地加载贷款模型,一切都很好!但现在我想知道是否有办法在我这样做时预先加载申请者模型:

现在我像这样访问它:

$modelResults = PublicCallback::with('loan')->get();

我得到所有的回调贷款急切,但我的意思是,当我急切加载贷款时,在这种情况下,我希望申请人也被加载!

有没有办法做到这一点,有可能吗?

【问题讨论】:

【参考方案1】:

你可以这样做:

$modelResults = PublicCallback::with(['loan', 'loan.applicant'])->get();

参考:https://laravel.com/docs/5.5/eloquent-relationships#eager-loading

【讨论】:

很好很好很好【参考方案2】:

为了后代,还有另一种加载嵌套关系的方法可以针对返回的模型执行,前提是您已正确设置关系:

帖子模型:

public function comments() 
    return $this->hasMany('App\Comment', 'quote_id', 'id');

评论模型:

public function user() 
    return $this->belongsTo('App\User');

然后您实际上可以通过绘制帖子但加载关系数组来通过与评论的关系来推断用户,例如:

$post = \App\Post::find($post_id);
return $post->load(['comments','comments.user']);

【讨论】:

以上是关于如何在 Laravel 中加载嵌套关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQLAlchemy 中加载嵌套关系?

Logstash 2.3.4如何使用logstash-jdbc插件在Elasticsearch中加载嵌套文档

如何在 AdminLte 多选下拉列表中加载项目以进行更新 - Laravel 8

在 laravel 中加载作曲家类

使用 Composer 在 Laravel 4 中加载 css/js 文件?

如何从不带引号的文件中加载嵌套列表?