Laravel: отложенная загрузка отношений модели не работает должным образом в методе boot() — загружаются все записи вместPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Laravel: отложенная загрузка отношений модели не работает должным образом в методе boot() — загружаются все записи вмест

Сообщение Anonymous »

Я столкнулся с необычным поведением при отложенной загрузке связей Laravel в методе boot().
Описание проблемы:
При попытке доступа к связям модели с помощью отложенной загрузки (

Код: Выделить всё

$user->relation
) в методе boot(), похоже, что Laravel неправильно обрабатывает конфигурации отношений. Однако если я явно предварительно загружаю связь с помощью $user->load('relation'), все работает как положено.
Пример проблемы:
В моем случае у меня есть цепочка отношений:

Код: Выделить всё

auth()->user()->role->permissions
Это неожиданно приводит к тому, что Laravel сначала извлекает одну роль (с LIMIT 1), а затем загружает ВСЕ разрешения из таблицы 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Entity Framework Core C# рекурсивная загрузка родительских дочерних отношений отложенная загрузка
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Запрос отношений отношений Laravel Morphtomany
    Anonymous » » в форуме Php
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Запрос отношений отношений Laravel Morphtomany
    Anonymous » » в форуме Php
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Отложенная загрузка цветовых переменных не определена в Tailwind CSS и в Chrome DevTools.
    Гость » » в форуме CSS
    0 Ответы
    48 Просмотры
    Последнее сообщение Гость
  • Использование файлов DLL и их отложенная загрузка вместо использования ссылки на проект.
    Anonymous » » в форуме C#
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»