Laravel 雄辩的:如何将快速加载和pivot过滤结合起来?
我在模型之间有一种多对多的关系。对于给定的模型实例,我知道如何根据pivot的值过滤相关模型。例如,对于用户和角色,我将使用:Laravel 雄辩的:如何将快速加载和pivot过滤结合起来?,laravel,eloquent,Laravel,Eloquent,我在模型之间有一种多对多的关系。对于给定的模型实例,我知道如何根据pivot的值过滤相关模型。例如,对于用户和角色,我将使用: User->roles()->wherePivot('admin',1); 同样,我知道如何为一组用户加载所有角色: User::where('active',1)->with('roles')->get(); 我想把这两个概念结合起来。例如,我如何检索一组用户及其急切加载的角色,其中用户根据pivot上的字段进行筛选 我意识到我可以用原始S
User->roles()->wherePivot('admin',1);
同样,我知道如何为一组用户加载所有角色:
User::where('active',1)->with('roles')->get();
我想把这两个概念结合起来。例如,我如何检索一组用户及其急切加载的角色,其中用户根据pivot上的字段进行筛选
我意识到我可以用原始SQL很容易地做到这一点,但如果可能的话,我更愿意使用Eloquent。您可以使用闭包限制您急切加载的关系
$users = User::with(['roles' => function ($query) {
return $query->wherePivot('admin', 1);
}])
->where('active', 1)
->get();
您还可以使用whereHas
查询关系
$users = User::with('roles')
->whereHas('roles', function ($query) {
return $query->wherePivot('admin', 1);
})
->where('active', 1)
->get();
您可以使用闭包限制您的关系
$users = User::with(['roles' => function ($query) {
return $query->wherePivot('admin', 1);
}])
->where('active', 1)
->get();
您还可以使用whereHas
查询关系
$users = User::with('roles')
->whereHas('roles', function ($query) {
return $query->wherePivot('admin', 1);
})
->where('active', 1)
->get();
当要向查询中添加子句时,将闭包传递到:
User::with(['roles' => function ($query) {
$query->where('admin', 1);
}])->where('active', 1)->get();
当要向查询中添加子句时,将闭包传递到:
User::with(['roles' => function ($query) {
$query->where('admin', 1);
}])->where('active', 1)->get();