Вы должны просто сгруппировать по столбцу ID_CATEGORY
вместо sex
.
Если вы хотите создать такой массив, как раньше, вам, вероятно, нужно имя категории. Это было бы легко, если бы вы использовали Eloquent. Вы бы $value->category->Name_Category
доступны. Если вы хотите, чтобы они были предварительно загружены вместо запроса для каждого значения, просто добавьте ->with('category')
к запросу, и вы получите его.
Если вы не используете Eloquent, вам следует просто загрузить таблицу категорий отдельно, введите его и используйте $categories[$value->ID_CATEGORY]->Name_Category
.
Другие комментарии
DB::raw('sex as sex')
эквивалентно sex
. ++$key
кажется избыточным, вы могли бы просто pu sh до конца, присвоив $array[]
. - Массив со строкой заголовка не очень JSON. Обычно у вас всегда будет
key:value
пар. - Вы можете создать массив, используя методы collection .
- Если у вас нет веских причин для наоборот, вы должны придерживаться Laravel соглашений об именах.
Я бы, вероятно, не создал бы сам массив, но сделал бы ваш пример примерно так:
$stats = User::select('sex', DB::raw('count(*) as number'))
->groupBy('sex')
->get();
$stats->setVisible(['sex', 'number']);
return $stats;