Merhaba sorguyu raw formatında yapıyorum. Join işlemi yapmam gerekiyor ama her dahil edilen tablo ile birlikte ana tablo çoğaltılıyor nasıl önüne geçebilirim ? Daha önce karşılaşanlarınız var mı ?
$query = \App\User::join('bolgeler', 'users.bolge', '=', 'bolgeler.id');
$query->join("yorumlar", "users.id","yorumlar.user_id");
Görüldüğü gibi toptan yapmıyorum çünkü bazılarının if else şeklinde sorgulara göre alınması gerek.
->distinct()
->orderBy('users.name', 'desc')
şeklinde kullanım önerenler olmuş fakat işe yaramadı,
unique() ile çoklama engel olunsa da bu sefer paginasyon tarafında sıkıntılara yok açıyor. Bazı değişimlerde $results->links() çalışmıyor.
if(!empty($request->bolge)){
$query->where('users.bolge',$request->bolge);
}
Şu şekilde çalışsa yeterli olacak ama şu sıra çoklaması sıkıntı bunun dışında zaten pivot tabloların değerlerini join ile eşitliyorum.
DB tek şart değil, fakat diğerleri de hemen hemen aynı duruma geliyor. Neden dublicate ediyor olabilir ? Nasıl önlenebilir ?
$query->select('kullanici.*',
'bolgeler.bolge',
'users.*'
);
Şeklinde select yapıyorum ama hiç bir işe yaramıyor bunu bir de "bolgeler.bolge as bolge" tarzı kullananlarda var.
Filtrelemeler de bildiğiniz gibi tek bir sorguya dahil edilmezse birleştirmeyle filan olmuyor çünkü sorguda ki tüm değerleri taşıması gerekiyor eğer varsa, biri bile eksikse arama sonucu olarak getirilmemeli.
Bu nedenle şu aşama da çoklaması listeletmeye mani oluyor. paginate(20) dediğimizde 3-5 tane gözüküyor, diğerleri kopya olduğundan ne kadar tablo varsa her users dan bir o kadar kopya çünkü.