Laravel 中三级关系的延迟预加载

Lazy Eager Loading for third level relationship in Laravel

UserModel 有多个潜在客户,每个潜在客户可以有一个 propertyLead,每个 propertyLead 可以有多个附件。 下面列出了每个型号,

用户模型:

  public function leads()
{
    return $this->hasMany('App\Models\Leads', 'fk_user_id');
}

LeadsModel:

    public function propertyLead()
{
    return $this->hasOne('App\Models\PropertyLead', 'fk_lead_id');
}

PropertyLeadModel:

    public function attachments()
{
    return $this->hasMany('App\Models\Attachments', 'fk_property_lead_id');
}

现在,我正在使用 laravel 的 Lazy Eager Loading 从数据库中读取数据,到目前为止我可以访问 PropertyLeadModel 但我无法访问了解如何在 PropertyLeadModel 中达到附件关系,

$leads = User::find(Auth::user()->id)->leads->load('propertyLead');

所以用户给我线索,线索给我 propertyLead,但无法理解如何深入到 propertyLeadModel 中的 Attachments

请帮助我理解。 谢谢。

试试这个,未测试

$leads = Auth::user()->leads->load('propertyLead', 'propertyLead.attachments');

您可以使用“点”表示法加载嵌套关系。

$user = Auth::user();
$user->load('leads.propertyLead.attachments');

// see all relationships loaded
dd($user);

由于线索和附件是“许多”关系,因此它们将是您必须迭代才能访问任何特定实例的集合。

试试这个

User::with('leads.propertyLead.attachments')->where('id',Auth::user()->id)->first();