#php #laravel #laravel-5
#php #laravel #laravel-5
Вопрос:
Mode
модель имеет hasMany
связь с DataSet
model. Я хочу загрузить наборы данных с помощью with()
-метода. Это работает нормально, если только мне не нужно ограничение на DataSet
per 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:
Это невозможно ни с какими методами Laravel.
Это очень сложная проблема, что у некоторых SQLS есть достаточные методы для ее решения, а у других нет.
Проблема поднималась несколько раз:
И, что наиболее заметно (и недавно):
Комментарии:
1. Спасибо, я посмотрю!
2. Штауденмейр, частый сотрудник Laravel и активный в SO, также выпустил пакет , который, похоже, решает эту проблему. Я не пробовал, но вы можете изучить это