В моем контроллере у меня есть этот необработанный запрос. Я пытаюсь создать интернет-магазин обувного магазина. В приведенном ниже коде группируются похожие элементы, введенные моими клиентами.
Контроллер
$items_counted = DB::select( DB::raw(" select * from (
SELECT COUNT(names) as products
FROM Shop
GROUP BY names
)));
Если клиенты выбирают обувь Masorini и обувь John Foster, ответ должен быть [{Masorini : 2 }], [{John Foster : 2 }] and not [{Product : 2 }], [{Product : 2 }].
Я пытаюсь получить значение (имя) того, что подсчитывается в базе данных
Как я могу этого добиться?
PS: Новый пользователь laravel






Попробуй это:
$items_counted = DB::select(DB::raw("select names, sum(names) as sum from Shop GROUP BY names");
$result = [];
foreach ($items_counted as $item) {
$result[$item->name] = $item->sum;
}
Первое предложение - использовать построитель запросов (или еще лучше красноречивый ORM).
Вот что вы можете сделать:
$items_counted = DB::table('Shop')
->groupBy('names')
->select('names', DB::raw('COUNT(names) as products'))
->pluck('products', 'names');
Когда вы отправляете это как ответ JSON, он должен иметь нужный вам формат.
так мой ответ выглядит как {"\" 0-3 \ "": 2, "\" Завышена \ "": 1, "\" Надежно \ "": 1, "\" Очень доволен \ "": 2 }
Как я могу убрать знак `//`, чтобы он выглядел как {"0-3":2,"Overpriced":1,"Reliable":1,"Very satisfied":2}
Котировки хранятся в базе данных?
Да, котировки хранятся в базе данных
В идеале вы не должны хранить их в базе данных, но вы можете удалить их, если измените выбор на ->select(DB::raw('JSON_UNQUOTE(names) as names'), DB::raw('COUNT(names) as products')). для этого требуется MySQL 5.7+, а также предотвращается использование любого индекса
создать отношение hasOne в модели и использовать его для получения значений. это ядро laravel, например, stackoverflow.com/a/42515792/3016038