#laravel #relationship
#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? Итак, я получаю все результаты вместе в одной и той же переменной?
Комментарии:
1. Вы можете вызывать вложенные отношения, например
->with([..., 'users.nonAcceptedContracts'])
. Это то, что вы ищете?2. Это именно то, что я искал. Спасибо… Я просто вхожу в уже разработанный проект laravel, понятия не имея о laravel, хе-хе. Напишите ответ, чтобы я установил его как решение.
Ответ №1:
Laravel позволяет создавать цепочки отношений. В вашем случае вы хотите включить users
отношения в свою UserContract
модель и nonAcceptedContracts
отношения в своей User
модели. Просто используйте обозначение dot ( .
) для отношений:
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
результатов, вы можете получить доступ users
и 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 для получения полной информации