Hayırlı geceler;
laravelde yeniyim daha önce titanphp framework olarak kullandım. Öncelikle belirtmek istedim 4 saattir arıyorum genelde hasmany örneği vermişler n+1 çözüm bulamadım.
yapmak istediğim jquery datatable yükledim.
üyeler controllerim var serverside listeliyorum listelerken üye kayıt olurken il, ilçe alıyorum. view dosyamda gösterirken üye modelimde hasone fonksiyonu oluşturdum il, ilçe için sorunsuz çekiyorum.
üyeler, il, ilçe tablolarım var üyeleri listelerken adres kısmına il adı ve ilçe adını yazdırcam innerjoin ile düz sorguda halletiğimi hasone ile yapayım dediğim sorgu sayısı çok arttı.
uye->adres_ili->il_adi yaptığımda çalışıyor fakat n+1 problemi oluyor. controller dosyamda with(['...', '...']) yaparsam null geliyor.
` public function datatable()
{
DB::enableQueryLog();
Kontrol
isset($GET["search"]["value"]) ? $GET["search"]["value"] : $GET["search"]["value"] = '';
isset($GET["order"]) ? $GET["order"] : $GET["order"] = '';
isset($GET["start"]) ? $GET["start"] : $GET["start"] = '' ;
isset($GET["length"]) ? $GET["length"] : $GET["length"] = '' ;
# Toplam Sayı
$toplam_sayi = Uye::count();
$toplam_sayi_filtre = $toplam_sayi;
# Kayıtlar
$table_kolonlar = array('uye_adi', 'uye_soyadi', 'adres', 'adres_il', 'adres_ilce');
$kayitlar = Uye::query();
# Arama
if(!empty(Request::get('search')['value'])){
$i = 0;
foreach($table_kolonlar as $kolon){
if($i==0){
$kayitlar->where($kolon, 'LIKE', '%'.Request::get('search')['value'].'%');
}else{
$kayitlar->orWhere($kolon, 'LIKE', '%'.Request::get('search')['value'].'%');
}
$i++;
}
}
# Arama: Özel
if(!empty(Request::get('adres_il'))){
$kayitlar->where('adres_il', Request::get('adres_il'));
}
if(!empty(Request::get('adi'))){
$kayitlar->where('uye_adi', 'LIKE', '%'.Request::get('adi').'%');
}
if(!empty(Request::get('soyadi'))){
$kayitlar->where('uye_soyadi', 'LIKE', '%'.Request::get('soyadi').'%');
}
# Limit
if(Request::get('length') != -1){
$kayitlar->offset(Request::get('start'))->limit(Request::get('length'));
}
# Sıralama
if(!empty($_GET["order"])){
# Tablede ilk numaralar olduğundan asıl column-1.
$kayitlar->orderBy($table_kolonlar[Request::filter($_GET["order"]['0']['column']-1)], Request::filter($_GET['order']['0']['dir']));
}else{
$kayitlar->orderBy('uye_id', 'DESC');
}
# Kayıtlar
$kayitlar = $kayitlar->with(['adres_ili','adres_ilcesi'])->get();
# Kayıtlar: Düzenle
$data = [];
foreach($kayitlar as $sira => $liste){
$data_butonlar = '';
$data_liste = [];
# Sıra
$data_liste[] = $sira + 1;
# Adı
$data_liste[] = $liste->uye_adi.' '.$liste->uye_soyadi;
# Adres
$data_liste[] = $liste->adres.'<br />'.$liste->adres_ili->il_adi.' / '.$liste->adres_ilcesi->ilce_adi;
# İşlemler
$data_butonlar .= '<a class="kf_dugme kf_dugme_mavi" href="'.url('admin/uyeler/duzenle/'.$liste->uye_id.'').'" kf_ipucu="Düzenle" title="Düzenle"><i class="fa fa-pencil"></i></a>';
$data_butonlar .= '<a class="kf_yon_sag kf_dugme kf_dugme_kirmizi" href="javascript:void(0)" onclick="sil('.$liste->uye_id.');" kf_ipucu="Sil" title="Sil"><i class="fa fa-trash"></i></a>';
$data_liste[] = $data_butonlar;
$data[] = $data_liste;
}
# JSON
$output = array(
"draw" => intval($_GET["draw"]),
"recordsTotal" => $toplam_sayi,
"recordsFiltered" => $toplam_sayi_filtre,
"data" => $data
);
# Yazdır
echo json_encode($output);
}`
uye modem dosyam
`namespace App\Models\Admin;
use Illuminate\Database\Eloquent\Model;
class Uye extends Model
{
protected $table = 'uyeler';
protected $primaryKey = 'uye_id';
//public $timestamps = false;
protected $guarded = ['uye_id'];
//protected $fillable = ['baslik','icerik'];
public function adres_ili()
{
return $this->hasOne('App\Models\Admin\İl', 'il_no', 'adres_il')->select(['il_adi']);
}
public function adres_ilcesi()
{
return $this->hasOne('App\Models\Admin\İlce', 'il_no', 'adres_il')->select(['ilce_adi'])->where('ilce_no', $this->adres_ilce);
}
}`