【问题标题】:Laravel 5 eloquent with whereHas more than 3. How to?Laravel 5 雄辩与 where 有超过 3 个。如何?
【发布时间】:2016-03-16 01:24:36
【问题描述】:

它似乎不起作用,当我在其中使用“with”和函数时,后来又尝试使用“has”函数。代码如下,应该更容易理解:

$users = Users::where("active","=", "1")->with(['photos' => function($q){
            $q->where('type','!=', 2);
       }])->has('photos', '>', 3)->paginate(8);
}

看起来,只有当用户有 3 张不是类型 2 的照片时,它才应该返回用户。但它不关心“where”子句,并且在不检查类型的情况下返回它。

我怎样才能实现我的目标?

谢谢!

【问题讨论】:

  • 哦,我试过了:->whereHas('photos', function ($query) { $query->where('type', '!=', '2'); } ) 但这样我就不能要求超过 3 张照片。因为“whereHas”函数会检查是否至少有 1...
  • has 将检查是否至少有 1 个。使用whereHas,您可以在其闭包中使用where

标签: laravel eloquent where relation


【解决方案1】:

对预先加载照片的约束根本不会影响查询获取用户。您需要使用whereHas() 方法将您的type 约束添加到照片检查中。

whereHas() 方法只是使用回调正确调用has() 方法的语法糖。 whereHas() 方法还接受一个运算符和一个计数。因此,以下应该有效:

$users = Users::with(['photos' => function($query) {
        $query->where('type', '!=', 2);
    }])
    ->where("active","=", "1")
    ->whereHas('photos', function ($query) {
        $query->where('type', '!=', 2);
    }, '>', 3)
    ->paginate(8);

【讨论】:

  • 谢谢,这正是我正在寻找的。我已经尝试过“whereHas”,但不知道可以制作“if more than N”,因为默认情况下它是 1。
  • @Tautvydas 没问题。如有疑问,您可以随时查看源代码,或查看api docs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 2020-07-23
  • 2019-01-28
  • 2017-11-05
  • 2016-05-23
  • 2018-05-19
相关资源
最近更新 更多