Неужели нет способа выполнить limit () в методе with ()?(Красноречивый) - PullRequest
0 голосов
/ 07 марта 2019
Модель

Mode имеет отношение hasMany к модели DataSet.Я хочу загрузить наборы данных с помощью with() -метода.Работает нормально, если только мне не нужно ограничение на DataSet за Mode.Следующий код не работает должным образом.Он ограничивает результаты DataSet все вместе, а не индивидуально для Mode.

$modes = $modes->with(['dataSets' => function ($query) use ($user, $count) {

    // Select data sets of user from each mode

    $query->join('data_set_user', 'id', '=', 'data_set_id')
          ->where('user_id', $user->id);

    if(isset($count))
           $query->limit($count);

 }])->orderBy('order_value')
            ->get();

Посмотрите на запрос, который генерирует этот код:

SELECT * FROM `data_sets` INNER JOIN `data_set_user` on `id` = `data_set_id` where `data_sets`.`mode_id` in (?, ?, ?) and `user_id` = ? limit 5"

Есть ли какой-нибудь способ Laravel, чтобы ограничение работало для каждого режима индивидуально ?

1 Ответ

2 голосов
/ 07 марта 2019

Это невозможно с любыми методами Laravel.

Это очень сложная проблема, так как некоторые SQL имеют достаточно методов для ее решения, а другие - нет.

Проблема поднималась несколько раз:

И особенно (и недавно):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...