【问题标题】:groupBy is expecting more table columns in many to many relationshipgroupBy 期望在多对多关系中有更多的表列
【发布时间】:2019-05-20 19:15:18
【问题描述】:

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

此处出错: roles_permissions.permission_id 不在 groupBy 中。

如果我添加,我会得到另一列不在 groupBy 中。

【问题讨论】:

  • 嗨。这是一个常见问题解答。请始终使用谷歌错误消息和许多清晰、简洁和特定的版本/措辞,使用和不使用您的特定字符串/名称和“site:stackoverflow.com”和标签并阅读许多答案。将您发现的相关关键字添加到搜索中。如果您没有找到答案,请发布,使用 1 个变体搜索作为标签的标题和关键字。请参阅向下投票箭头鼠标悬停文本。如果您确实有要发布的非重复代码问题,请阅读并通过minimal reproducible example 采取行动。

标签: mysql join laravel-5


【解决方案1】:

您在 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();

您尝试做的事情没有意义。 Group by 不能以这种方式工作。

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

有效

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

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

【讨论】:

  • 但我也想选择所有的roles.name。你给我的例子给了我roles.id和permissions.name ..
猜你喜欢
  • 1970-01-01
  • 2017-10-20
  • 2021-06-04
  • 1970-01-01
  • 2016-05-05
  • 2018-05-14
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
相关资源
最近更新 更多