Eloquent:如何通过枢轴结合急切加载和过滤?

时间:2018-01-18 23:31:15

标签: laravel eloquent

我在模型之间有多对多的关系。对于给定的模型实例,我知道如何根据数据透视表的值过滤相关模型。例如,对于用户和角色,我会使用:

User->roles()->wherePivot('admin',1);

同样,我知道如何为一组用户急切加载所有角色:

User::where('active',1)->with('roles')->get();

我想要做的是结合这两个概念。例如,如何使用急切加载的角色检索一组用户,根据角色上的字段过滤用户?

我意识到我可以使用原始SQL轻松地做到这一点,但如果可能的话,我更愿意使用Eloquent。

2 个答案:

答案 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>