#mysql #laravel #eloquent
#mysql #ларавель #красноречивый
Вопрос:
У меня есть две таблицы, и я хочу сделать один запрос с помощью count. Мое первое имя таблицы — orders
с полями :
идентификатор продукта_id | Количество |
---|---|
1 | 1 |
2 | 1 |
1 | 2 |
1 | 1 |
2 | 1 |
Моя вторая таблица items
выглядит следующим образом: поля :
ID | идентификатор продукта_id | Цена |
---|---|---|
1 | 1 | 2.99 |
2 | 2 | 3.99 |
3 | 1 | 1.99 |
4 | 1 | 5.99 |
Как вы можете видеть, идентификатор продукта: у 1 больше заказов, но в таблице товаров идентификатор продукта 1 имеет 3 цены, я хочу получить product_id с большим количеством заказов и самой низкой ценой.
мой запрос приведен ниже
Items::->withCount(['orders' => function($q){
$q->active();
}])
->orderBy('orders_count', 'desc')
->groupBy('product_id')
->limit(1)->get();
Я получаю товар с большим количеством заказов, но первая запись с ценой 2,99, но я хочу получить 3-ю запись с ценой 1,99 (с тем же идентификатором продукта_id)
Ответ №1:
Я думаю, вы можете использовать другую функцию OrderBy для своего запроса, чтобы получить самую низкую цену. Возможно, приведенный ниже код работает!
Items::->withCount(['orders' => function($q){
$q->active();
}])
->orderBy('orders_count', 'desc')
->orderBy('price' , 'asc')
->groupBy('product_id')
->limit(1)->get();
Примечание: этот синтаксис работает для laravel версии 7 или выше
Комментарии:
1. Извините, но это не работает… мое приложение находится в larval 5.7
Ответ №2:
Я предполагаю, что простой необработанный выбор вернет ожидаемый результат
Items::withCount(['orders' => function($q){
$q->active();
}])
->select(['product_id', DB::raw('min(price) as lowest_price')])
->orderBy('orders_count', 'desc')
->groupBy('product_id')
->limit(1)
->get();