groupby希望在多对多关系中有更多的表列

e0uiprwp  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(286)

我正试图获得所有角色的许可,这是一个多对多的关系。我想获得单个角色的所有权限。在这里,我试图使用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();

此处出错:角色\u权限。权限\u id不在groupby中。
如果我加上我得到的另一列不在groupby中。

nuypyhwy

nuypyhwy1#

select语句中没有任何聚合操作。看看我的例子

$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

不是。在后一种情况下,通常需要添加未聚合到GROUPBY语句的每一列

相关问题