Описание проблемы:
При попытке доступа к связям модели с помощью отложенной загрузки (
Код: Выделить всё
$user->relation
Пример проблемы:
В моем случае у меня есть цепочка отношений:
Код: Выделить всё
auth()->user()->role->permissions
Чтобы проверить это поведение, я создал тестовую связь напрямую из пользователя в таблицу role_permissions, и результат был тот же — загружаются все строки из таблицы role_permissions.
Что я пробовал:
Я буду в этом примере используйте $user, но это применимо к любой гидратированной модели внутри метода boot().
Непосредственное использование отложенной загрузки: $user->relation
Использование нетерпеливая загрузка: $user->load('role.permissions')
Код: Выделить всё
class Contractor extends AbstractModel
{
public static function boot()
{
// Scenario 1
auth()->user()->role->permissions; // incorrect - all records from role_permissions
// Scenario 2
$user = User::find(auth()->user()->id);
$user->role->permissions; // incorrect - all records from role_permissions
// Scenario 3
auth()->user()->load('role.permissions');
auth()->user()->role->permissions; // correct records
// Some other logic
}
}
Вопросы:
Есть ли это известное ограничение метода boot() в Laravel?
Почему отложенная загрузка в boot() ведет себя иначе по сравнению с другими методами?
Существует ли рекомендуемый подход для обработки отношений загрузка в boot()?
Окружающая среда:
Версия Laravel: 11
Версия PHP: 8.2
Подробнее здесь: https://stackoverflow.com/questions/793 ... oot-method