2016-03-16 30 views
0

看來它不起作用,當我在裏面使用「with」和函數,然後嘗試使用「has」函數。下面的代碼,它應該是比較容易理解:Laravel 5雄辯地超過了3.如何?

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

看來,它應該返回用戶只,如果他有3張照片這是類型2的不但是它不關心「其中」條款並返回它而不檢查類型。

我該如何實現我所追求的目標?

謝謝!

+0

哦,我曾嘗試: - > whereHas( '照片',函數($查詢){ \t $查詢 - >在哪裏( '型',」 = ','2'); }) 但以這種方式,我不能要求超過3張照片。因爲「whereHas」函數檢查是否存在至少1個...... – Tautvydas

+0

'has'將檢查是否至少有1個。使用'whereHas'可以在其閉包中使用'where'。 – user2094178

回答

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); 
+0

謝謝,那正是我正在尋找的。我曾嘗試過「whereHas」,但不知道有可能使「如果超過N」,因爲默認情況下它是1. – Tautvydas

+0

@Tautvydas沒問題。如有疑問,您可以隨時查看源代碼,或查看[api文檔](https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_whereHas)。 – patricus