使用whereHas查找所有不具有特定值的项目(例如User和Role-获取所有不具有管理员角色的用户)

时间:2020-02-11 13:45:54

标签: laravel

我有两个模型,用户和角色。每个用户都有许多角色,例如“管理员”,“简单用户”等。 我想让所有不具有“管理员”角色的用户。我知道可以通过Join查询解决。但是我想使用“ wherHas()”函数。

User table has id, name
Role table has id, slug, name
user_role as pivot table has user_id and role_id

在用户模型中

public function roles()
{
    return $this->belongsToMany('App\Role');
}

以及在角色模型中

public function users()
{
    return $this->belongsToMany('App\User');
}

查询示例:

$users = User::whereHas('roles', function ($query){
    $query->where('slug', '!=', 'ecoyar');
  })->get(); 

对不起我的英语!

1 个答案:

答案 0 :(得分:1)

How to query the absence of a relationship

use Illuminate\Database\Eloquent\Builder;

$users = App\User::whereDoesntHave('roles', function (Builder $query) {
    $query->where('slug', 'like', 'ecoyar');
})->get();