Eloquent - пустое отношение модели появляется, когда "orderBy desc" - PullRequest
0 голосов
/ 29 октября 2018

У меня есть запрос на выборку товаров с некоторыми отношениями, но при добавлении "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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...