Можно ли отсортировать результаты выбора по отношениям? - PullRequest
0 голосов
/ 26 января 2019

Можно ли отсортировать результаты выбора по отношениям?

У меня есть отношение один ко многим.Продукт имеет несколько позиций.И у каждого предмета есть цена.Мне нужно получить продукты, однако заказ продуктов должен осуществляться по цене пунктов

. Позвольте мне привести пример:

Product::with(['items'])->whereHas('items', function ($query) {

    $query->orderBy('price', 'desc')

})->get();

Это было бы что-то вроде этого.Но мне нужно отсортировать товары по ценам, которые находятся внутри товаров.

, если в моей базе данных есть следующее:

product 1
  item $ 1.2
  item $ 2.0

product 2
  item $ 3.0
  item $ 0.5

product 3
  item 1.0

Мне нужен возврат:

product 2
  item $ 3.0
  item $ 0.5

product 3
  item 1.0

product 1
  item $ 1.2
  item $ 2.0

потому что это считалось самым низким элементом каждого продукта.Как я могу сделать этот запрос, используя enloquent?

Ответы [ 2 ]

0 голосов
/ 26 января 2019

whereHas обычно используется для запроса существования отношений с дополнительными where() условиями. Из документации :

Если вам нужно еще больше энергии, вы можете использовать whereHas и orWhereHas методы, чтобы поставить "где" условия на ваши запросы. Эти методы позволяют добавлять настраиваемые ограничения в ограничение отношений.

В вашем конкретном случае вы просто хотите заказать загруженные отношения. Таким образом, следующее должно помочь.

$product = Product::with(['items' => function($query) {
        $query->orderBy('price', 'asc');
    }])
    ->get();
0 голосов
/ 26 января 2019

вы можете попробовать это по вашему запросу.

Product::withCount(['items as ItemTotalAmount' => function($q){
        $q->select(DB::raw("SUM(price)"));
}])
->with('items')
->orderBy('ItemTotalAmount', 'ASC')->get();

В этом запросе сначала суммируется цена товара и помещается сумма в псевдоним ItemTotalAmount

Затем я использовал orderBy в ItemTotalAmount, чтобы отсортировать товары, у которых больше общая стоимость товаров.

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