Laravel Соотношение нагрузки с условием на модели - PullRequest
7 голосов
/ 04 августа 2020

Я пытаюсь загрузить уведомления пользователя с отношением, зависящим от значения модели уведомления:

$notifications = $user->notifications()
    ->with([
        'notifiable' => function ($query) {
            // Only load notifiable relation if notification 'notifiable_type' equals...
        },
        'notifiable.group:id,title' => function ($query) {
            // Only load notifiable.group:id,title relation if notification 'notifiable_type' equals... 
        }
    ])
    ->get();

Проблема в том, что $query внутри замыканий запрашивает notifiable отношение, а не сама модель уведомлений ... Я явно упускаю что-то очень тривиальное. Есть предложения?

1 Ответ

1 голос
/ 04 августа 2020

Вы можете использовать Lazy Eager Loading

$notifications = $user->notifications;

$notifications->each(function ($item) {
    if ($item->notifiable_type == 'value-one') {
        $item->load('notifiable');
    }

    if ($item->notifiable_type == 'value-two') {
        $item->load('notifiable.group:id,title');
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...