groupBy ожидает больше столбцов таблицы во многих отношениях - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь получить разрешение для всех ролей, которое имеет отношение ко многим.Я хочу получить все разрешения одной роли.Здесь я пытаюсь использовать groupBy, но это дает мне ошибку.

$search_role = DB::table('roles')
    ->join('roles_permissions','roles_permissions.role_id','roles.id')
    ->join('permissions','permissions.id','roles_permissions.permission_id')
    ->where('roles.name', 'like', "%$request->searcher%")
    ->orWhere('permissions.name', 'like', "%$request->searcher%")            
    ->select('roles.name as role_name', 'permissions.name as permission_name','roles_permissions.*')                                             
    ->groupBy('roles_permissions.role_id')
    ->get();

Ошибка здесь: role_permissions.permission_id отсутствует в groupBy.

Если я добавлю это, я получу другой столбец, которого нет в groupBy.

1 Ответ

0 голосов
/ 20 декабря 2018

у вас нет операции агрегации в операторе выбора.посмотрите мой пример

$search_role = DB::table('roles')
    ->join('roles_permissions','roles_permissions.role_id','roles.id')
    ->join('permissions','permissions.id','roles_permissions.permission_id')
    ->where('roles.name', 'like', "%$request->searcher%")
    ->orWhere('permissions.name', 'like', "%$request->searcher%")            
    ->select('role_id', DB::raw('count(*) as total'))    //example                                          
    ->groupBy('roles_permissions.role_id')
    ->get();

то, что вы пытаетесь сделать, не имеет смысла.Группировка по не работает таким образом.

SELECT role_id, count(*)
from roles
group by role_id

действительно

SELECT roles.*, count(*)
from roles
group by role_id

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

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