Подсчитать количество книг по категориям, отдельные таблицы - PullRequest
0 голосов
/ 25 апреля 2020

Я использую Laravel 5, и мне нужно знать количество книг по категориям, эти данные я буду использовать в диаграммах Google.

У меня есть код ниже, который я использую, чтобы узнать количество пользователей по полу. Однако данные находятся в той же таблице.

 $data = DB::table('books')
        ->select(
            DB::raw('category_id as category'),
            DB::raw('count(*) as number'))
        ->groupBy('category')
        ->get();
    $array[] = ['Category', 'Number'];
    foreach($data as $key => $value)
    {
        $array[++$key] = [$value->category->name, $value->number];
    }
    $test = json_encode($array);

Используя тот же лог c, как указано выше, как я могу получить количество книг по категориям?

У меня есть Книги таблица:

ID   |  Name      | ID_CATEGORY
1       Laravel        20
2       Java           20

Таблица категорий:

ID     |   Name  
20        Programming

Не могли бы вы помочь мне в этой ситуации?

1 Ответ

1 голос
/ 25 апреля 2020

Вы должны просто сгруппировать по столбцу 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...