我正在使用Eloquent构建一个应用程序并且遇到了一个无赖,我正在使用多对多的Pivot关系。 ref:https://laravel.com/docs/5.0/eloquent#many-to-many
用户模型
角色模型
用户角色模型(数据透视表)
如果我想让所有具有角色ID 1
的用户,我只会:
$users = $app->users->with('roles')->has('roles')
->whereHas('roles' function($query) {
$query->where('role_id', 1);
})
->get();
有了这个,我可以成功获得角色id = 1的所有用户。
[问题] 现在,我需要让所有用户Role id = 1 AND Role id = 2
(我的情况下都是管理员和主持人)
我试过这个:
$users = $app->users->with('roles')->has('roles')
->whereHas('roles' function($query) {
$query->where('role_id', 1);
})
->whereHas('roles' function($query) {
$query->where('role_id', 2);
})
->get();
但是我的PHP执行时间耗尽了,有没有正确的方法来处理这个?我真的希望有效的方法来做到这一点。
谢谢
答案 0 :(得分:0)
您可以尝试:
$users = $app->users->with('roles')
->whereHas('roles' function($query) {
$query->where('role_id', 1)
->where('role_id', 2);
})
->get();
我故意删除了->has('roles')
,因为我们在角色表上使用了whereHas()
,因此has
将毫无用处。它的工作方式也一样。