首页 > 解决方案 > 同一个调用中的两个 laravel 关系

问题描述

我有一个 Usercontract 表和模型......我可以用它的关系来调用 usercontracts

return UserContract
        ::with(['contracttax', 'contractproperty', 'persons', 'contractwarranty', 'users', 'contracts', 'tags'])
        ->orderBy('created_at', 'desc')->get();

然后我有另一个使用这种方法的用户模型。

public function nonAcceptedContracts()
{
    return $this->belongsToMany(UserContract::class, 'invite', 'email', 'usercontract', 'email')->where('status', 'pending');
}

有没有办法将此“nonAcceptedContracts”与来自 Usercontract 的其他关系一起调用?所以我最终将所有结果放在同一个变量上?

标签: laravelrelationship

解决方案


Laravel 允许你链接关系。在您的情况下,您希望在模型中包含users关系UserContract,以及在模型中包含nonAcceptedContracts关系User。只需.在关系上使用点 ( ) 表示法:

return UserContract::with([
  'contracttax',
  'contractproperty',
  'persons',
  'contractwarranty',
  'users.nonAcceptedContracts', // Note: This will include both `users` and `nonAcceptedContracts`
  'contracts',
  'tags'
])->orderBy('created_at', 'desc')
->get();

现在,在迭代UserContract结果时,您可以访问usersand nonAcceptedContracts

foreach ($userContracts as $userContract) {
  foreach ($userContract->users as $user) {
    // Do something with `$user->nonAcceptedContracts` ...
  }
}

有关完整信息,请参阅https://laravel.com/docs/8.x/eloquent-relationships#nested-eager-loading


推荐阅读