雄辩的多个whereHas(' pivot_table_X')和whereHas(' pivot_table_X')

时间:2016-11-02 10:29:08

标签: php mysql arrays laravel-5 eloquent

我正在使用Eloquent构建一个应用程序并且遇到了一个无赖,我正在使用多对多的Pivot关系。 ref:https://laravel.com/docs/5.0/eloquent#many-to-many

用户模型

  • ID
  • USER_NAME

角色模型

  • ID
  • ROLE_NAME

用户角色模型(数据透视表)

  • id
  • USER_ID
  • ROLE_ID

如果我想让所有具有角色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执行时间耗尽了,有没有正确的方法来处理这个?我真的希望有效的方法来做到这一点。

谢谢

1 个答案:

答案 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将毫无用处。它的工作方式也一样。