Laravel Eloquent 访问第三关系

Posted

技术标签:

【中文标题】Laravel Eloquent 访问第三关系【英文标题】:Laravel Eloquent accessing a 3rd relationship 【发布时间】:2020-07-03 21:06:21 【问题描述】:

我有 4 个模型,User、Profile、Audit 和 AuditApplications。

我的表结构类似于:

User
    - id
    - ... other user-related fields

Profile
    - id
    - user_id
    - ... various profile fields

Audit
    - id
    - user_id

AuditApplications
    - id
    - audit_id
    - user_id

我的用户模型如下所示:

public function profile()

    return $this->hasOne('App\Profile');


public function auditApplications()

    return $this->hasMany('App\AuditApplications');

这样我就可以轻松获取用户及其相关个人资料以及用户申请的审核列表。

接下来,我有 AuditApplications 表,其中包含已申请审计的用户 ID 和审计 ID 列表。我的 AuditApplications 表有以下关系。

public function user()

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

所以我可以返回一个已申请审核的用户列表,如下所示:

$applicants = AuditApplications::where('audit_id', $audit->id)->with('user')->get();

所有这些都按预期运行,但现在我想在获得应用程序列表时访问用户的个人资料。这种关系是距离关系,因此我想在 AuditApplications 模型中获取用户列表及其配置文件。

有没有一种方法可以在 Eloquent 中执行此操作,而无需在我的控制器中创建一个循环,然后循环遍历每个获取个人资料的用户?

【问题讨论】:

许多用户可以申请审计??我猜auditapplications 是数据透视表。要访问配置文件表中的任何内容,请使用 auditapplication->user->profile->profile_attribute,您也可以像 ->with('user','user.profile') 一样急切加载关系 @zahidhasanemon 是的,我相信这是正确的关系。创建审核后,许多用户可以要求加入。好的,谢谢,我会考虑你的建议 【参考方案1】:

你只需要->with('user.profile')

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review 我不同意,这是急于加载:laravel.com/docs/7.x/eloquent-relationships#eager-loading

以上是关于Laravel Eloquent 访问第三关系的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Laravel Eloquent 关系中获取数据

从 eloquent builder laravel 7 获取关系数据

Laravel Eloquent发现并返回两种不同的类型?

Laravel/Eloquent - 创建与可能具有或不具有属性的父模型相关的多个子模型的关系

使用 Eloquent 在 Laravel 中使用 where 子句访问嵌套的相关对象

Laravel Eloquent 与存储库/服务设计模式的关系