Получить количество и название объекта между связанными таблицами - PullRequest
0 голосов
/ 27 апреля 2020

Я беру данные из моей таблицы Животные , которая связана с таблицей Категории . Моя проблема в том, что мне нужно подсчитать, сколько продуктов в каждой категории зарегистрировано.

Выполняя поиск здесь, в Stackoverflow, я начал использовать приведенный ниже код, который возвращает количество животных в категории ([Животное, количество] ).

$data = DB::table('animals')
                ->select(
                    DB::raw('category_id as category'),
                    DB::raw('count(*) as number'))
                ->groupBy('category')
                ->get();
            $array[] = ['Name', 'Quantity'];
            foreach($data as $key => $value)
            {

                $array[++$key] = [$value->category, $value->number];
            }
            $cat = json_encode($array);
            dd($cat);

Используя "dd", я вижу, что приведенные ниже данные верны, но идет category_id, я не уверен, как получить этот идентификатор и поставить имя категории для этого идентификатора.

"[["Category","Quantity"],[1,10],[2,14],[3,30],[4,26],[5,1]]"

Пример: [2,14] это относится к category_id 2 с именем: млекопитающее . Итак, я бы зарегистрировал 14 животных в категории млекопитающих.

Мне бы хотелось, чтобы результат был таким:

"[["Category","Quantity"],[birds,10],[mammals,14],[reptiles,30],[amphibians ,26],[fish,1]]"

Как я могу обработать этот идентификатор, связанный с названием категории?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Вы можете использовать метод "withCount" из модели, он поможет вам подсчитать количество результатов от отношения

$posts = App\Post::withCount('comments')->get();
foreach ($posts as $post) {
    echo $post->comments_count;
}

См. Документацию https://laravel.com/docs/7.x/eloquent-relationships#counting -related-models

0 голосов
/ 27 апреля 2020

Присоединитесь к своей таблице категорий и получите оттуда имя, я думаю, оно должно выглядеть следующим образом:

$data = DB::table('animals')
    ->join('category', 'animals.category_id', '=', 'category.id')
    ->select(
        DB::raw('category.id as category_id'),
        DB::raw('category.name as category_name'),
        DB::raw('count(*) as number'))
    ->groupBy('category')
    ->get();

Подробнее о соединениях

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