基本上我只想转储所有具有特定角色的用户。当我这样做时:
$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();
但这当然行不通。
这就是我为了让它工作所做的。对于其他有问题的人,请查看 Laravel 雄辩关系文档,这就是我解决问题的地方。
$users = User::whereHas('roles', function ($query) {
$query->where('name', '=', 'owner');
})->get();
如果你使用雄辩关系,你也可以做这样的事情。这是反比关系。
$users = Role::where('name', 'owner')->first()->users;
您可以为预先加载查询指定其他查询约束,如下所示:
$users = User::with(['roles' => function ($query) {
$query->where('name', '=', 'owner');
}])->get();
更新:如果要为用户表指定其他查询约束,可以像这样链接它们:
$users = User::with(['roles' => function ($query) {
$query->where('name', '=', 'owner');
}])->where('role_id', '<>', null)->->get();
注意:不确定数据库中是否有role_id或什么,因此请说明。
像这样使用你的查询:-
$users = App'User::with(['roles' => function ($query) {
$query->where('name', 'owner');
}])->get();