Echo wrote:Bende ilk önce with() ile denemiştim ama o olay biraz daha farklı yürüyor.
Örneğin; Yazıların var bir tane, bir de kullanıcıların var. Sen with() içinde WHERE sorgusu yapıp Kullanıcılardan sadece "Eskişehir" olanları getir diyeceksin.
Laravel sana Yazılarının tamamını getirecek aynı zamanda sadece Eskişehir'de olan kullanıcıları yazıların altında gösterecektir. Benim istediğim şey yazıları da filtrelemesi.
İşte tam olarak dediğini yapmasın diye where ekledim closure olarak 2. parametreye ;)
Örneğimde;
Önce sadece threadID'si 5 olan yazıları getiriyor.
Sonra users ile birleştiriyor, fakat birleştirirken tanımladığın relationa ek olarak town ları $town olanları filtreliyip (kendi filtre mekanizman) öyle ekliyor.
Bak kendi projemden örnek vereyim:
Route::get('test',function(){
$q = User::where('id',6)
->with(array('projects'=>function($query){
$query->where('companyID',2);
}))->get();
return dd(DB::getQueryLog());
});
ID si 6 olan user ın bilgilerini proje bilgileri ile aldım, ama proje bilgilerini birleştirip çekerken sadece companyID si 2 olan projeleri çek dedim.
Çıkan SQL dökümü:
array(2) {
[0]=>
array(3) {
["query"]=>
string(36) "select * from `users` where `id` = ?"
["bindings"]=>
array(1) {
[0]=>
int(6)
}
["time"]=>
float(0.49)
}
[1]=>
array(3) {
["query"]=>
string(77) "select * from `projects` where `projects`.`userID` in (?) and `companyID` = ?"
["bindings"]=>
array(2) {
[0]=>
string(1) "6"
[1]=>
int(2)
}
["time"]=>
float(0.41)
}
}
Olay burada bak:
string(77) "select * from `projects` where `projects`.`userID` in (?) and `companyID` = ?"
Umarım anlatabilmişimdir.
Ayrıca Sergin'e katılıyorum. Hazırladığın sorguda söz diziminde mantık hatası var. Ayrıca yapın uygunsa whereIn kullanmak sorguyu da hafifletecektir.