Tushar Monirul
Tushar Monirul

Reputation: 5064

get count in joining multiple table

I have 3 tables named user, group and user_has_group. I am joining these tables using eloquent. Everything is working just fine, but I need something more. I need to figure it out that which group has how many users. Here the I code I have used:

$result = UserHasGroup
                ::join('group', 'user_has_group.group_id', '=', 'group.id')
                ->join('user', 'group.created_by', '=', 'user.id')
                ->where('user_has_group.user_id', '=', $user -> id)
                ->select("user.name as created_by",
                    'group.created_at',
                    'user_has_group.user_id',
                    'group.name as group_name')
                ->getQuery()
                ->get();

and here's the response:

{
    "successful": [
        {
            "created_by": "TUSHAR13",
            "created_at": "2018-05-11 18:04:38",
            "user_id": "5",
            "group_name": "DSGJA"
        },
        {
            "created_by": "TUSHAR13",
            "created_at": "2018-05-11 18:10:17",
            "user_id": "5",
            "group_name": "V76OL"
        },
        {
            "created_by": "TUSHAR13",
            "created_at": "2018-05-10 00:00:00",
            "user_id": "5",
            "group_name": "qwerr"
        }
    ]
}

Now I can't understand where to add groupby and count query. I need help.

Upvotes: 0

Views: 37

Answers (1)

FULL STACK DEV
FULL STACK DEV

Reputation: 15941

$result = UserHasGroup
                ::join('group', 'user_has_group.group_id', '=', 'group.id')
                ->join('user', 'group.created_by', '=', 'user.id')
                ->select("user.name as created_by",
                    'group.created_at',
                    'user_has_group.user_id',
                    'group.name as group_name', DB::raw('count(*) as total'))
                ->groupBy('user_id')
                ->getQuery()
                ->get();

You have to use DB::raw('Count(*)') in the select() then use group by user_id.

hope this helps.

Upvotes: 1

Related Questions