Присоединяйтесь и заказывайте с помощью laravel красноречивого запроса - PullRequest
0 голосов
/ 30 января 2020

Я хочу отобразить упорядоченный список магазинов по городам от бренда.

Это код, который я пробовал

 $brand = Brand::where('slug','=',$slugurl)
      ->with(['stores' => function($q){
        $q->where('status', 1)
        ->join('cities', function ($join){
              $join->on('cities.id', '=', 'stores.city_id')->orderBy('cities.sort_number', 'DESC');
        });

      }])
      ->firstOrFail();

Соотношение таблиц:

Бренд имеетМногие магазины и магазины принадлежат городам

Вывод результатов поиска не упорядочен по городам sort_number. Есть идеи как этого добиться?

1 Ответ

0 голосов
/ 30 января 2020

Бесполезно order в закрытии join.

Вам необходимо добавить orderBy после join:

$brand = Brand::where('slug','=',$slugurl)
      ->with(['stores' => function($q){
        $q->where('status', 1)
          ->join('cities', 'cities.id', '=', 'stores.city_id')
          ->orderBy('cities.sort_number', 'DESC');
      }])
      ->firstOrFail();

Этот запрос преобразовать в raw sql is:

select * from brands where slug = ? limit 1;

select * from stores 
join cities on cities.id = stores.city_id 
where status = 1 and stores.brand_id in (?)
order by cities.sort_number desc;
...