基本上我只想转储具有特定角色的所有用户。当我这样做时:
$users = User::with('roles')->get();
我在用户上添加了所有用户和角色,如下所示:
{
id: 1,
first_name: "P",
last_name: "Tag",
email: "packy@test.com",
phone: "5555555555",
avatar: "",
last_login: "2016-07-13 23:49:23",
created_at: "2016-07-13 23:25:05",
updated_at: "2016-07-13 23:49:23",
roles: [
{
id: 1,
name: "owner",
display_name: "Admin",
description: "Admin user that has full access",
created_at: "2016-06-07 00:00:00",
updated_at: "2016-06-07 00:00:00",
pivot: {
user_id: 1,
role_id: 1
}
}
]
},
很好,我现在只想让角色名称为特定值的用户。我想我的查询看起来像这样,但不知道如何写它:
$users = User::with('roles')->where('roles->name', '=', 'owner')->get();
但那当然不起作用。
答案 0 :(得分:7)
所以这就是我为了让它发挥作用所做的。对于其他有问题的人,请查看Laravel Eloquent Relationship文档,这就是我解决问题的地方。
$users = User::whereHas('roles', function ($query) {
$query->where('name', '=', 'owner');
})->get();
答案 1 :(得分:1)
您可以为热切换加载查询指定其他查询约束,如下所示:
$users = User::with(['roles' => function ($query) {
$query->where('name', '=', 'owner');
}])->get();
更新:如果您想为users表指定其他查询限制,可以将它们链接起来:
$users = User::with(['roles' => function ($query) {
$query->where('name', '=', 'owner');
}])->where('role_id', '<>', null)->->get();
注意:不确定是否为role_id或数据库中的内容,以便说明。
答案 2 :(得分:0)
使用您的查询: -
$users = App\User::with(['roles' => function ($query) {
$query->where('name', 'owner');
}])->get();
答案 3 :(得分:0)
如果您使用雄辩的关系,您也可以执行以下操作。这是反比关系。
$users = Role::where('name', 'owner')->first()->users;