У меня есть запрос на выборку товаров с некоторыми отношениями, но при добавлении "orderBy('updated_at', 'desc')
связь с изображениями товаров становится пустым массивом.
Я начинаю с:
$products = \App\Product::where('id', '>', 0)
->with('designer')
->whereIn('id', [$someIds]);
Затем я продолжаю добавлять некоторые отношения с запросами "whereHas" (если бы я их удалил, проблема все еще существует)
Наконец, если я сделаю:
return $products
->with('gallery.items')
->orderBy('updated_at', 'desc')->paginate($args['count']);
массив gallery.items
становится пустым. Он отлично работает, если я сделаю 'asc'
вместо 'desc'
. Я также попробовал метод orderByDesc
, но это то же самое.
Если я изменяю порядок, делая orderBy перед добавлением отношений «с», он также возвращает пустой массив для изображений галереи:
return $products->orderBy('updated_at', 'desc')
->with('gallery.items')
->paginate($args['count']);
Редактировать :
Я могу сделать более простой запрос, чтобы сузить проблему:
return $products = \App\Product::take(30)
->orderBy('updated_at', 'desc')
->with('gallery.items')
->get();
^^ Это также дает пустые элементы галереи. Если я удаляю ->orderBy('updated_at', 'desc')
, элементы галереи отображаются так, как должны. Также работает 'asc' (это сортировка по умолчанию).
Обновление:
вот вышеупомянутый запрос ^^, зарегистрированный как \DB::enableQueryLog()
:
{
"query": "select * from `products`
order by `updated_at` desc limit 30",
"bindings": [],
"time": 26.46
},
{
"query": "select * from `galleries` where `galleries`.`id`
in (?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
"bindings": [
3970,3971,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,
3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,
3999,4000],
"time": 3.64
},
{
"query": "select `uploads`.*,
`gallery_items`.`gallery_id` as `pivot_gallery_id`,
`gallery_items`.`upload_id` as `pivot_upload_id`,
`gallery_items`.`order` as `pivot_order`
from `uploads`
inner join `gallery_items` on `uploads`.`id` = `gallery_items`.`upload_id`
where `gallery_items`.`gallery_id`
in (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?)",
"bindings": [
3970,3971,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,
3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,
3996,3997,3998,3999,4000],
"time": 48.92
Редактировать 2:
Отношение gallery.items для модели Gallery выглядит следующим образом:
items(){
return $this->belongsToMany('\App\Upload', 'gallery_items','gallery_id','upload_id')
->withPivot('order');
}