我在模型之间有多对多的关系。对于给定的模型实例,我知道如何根据数据透视表的值过滤相关模型。例如,对于用户和角色,我会使用:
User->roles()->wherePivot('admin',1);
同样,我知道如何为一组用户急切加载所有角色:
User::where('active',1)->with('roles')->get();
我想要做的是结合这两个概念。例如,如何使用急切加载的角色检索一组用户,根据角色上的字段过滤用户?
我意识到我可以使用原始SQL轻松地做到这一点,但如果可能的话,我更愿意使用Eloquent。
答案 0 :(得分:3)
您可以使用闭包限制您的预先加载的关系。
class Foo[T](t: T)(implicit num: Numeric[T]){
val negated = num.negate(t)
val doubled = num.plus(t, t)
val squared = num.times(t, t)
}
您还可以使用$users = User::with(['roles' => function ($query) {
return $query->wherePivot('admin', 1);
}])
->where('active', 1)
->get();
来查询关系。
whereHas
答案 1 :(得分:1)
在急切加载时将闭包传递给with以向查询添加子句:
<h1>{{ name | lowercase }}</h1>