Merhaba,
Bir haber sitesi kodluyorum. Ana sayfadaki bölümler için sorguları oluştururken çok tekrar ettiğimi farkettim. Sorguları hızlandırmak için nasıl düzeltebilirim? Sorgular;
$mansetler = Yazi::aktif(1)
->yeri($this->ana_manset)
->sirali()
->take(16)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$alt_manset = Yazi::aktif(1)
->yeri($this->alt_manset)
->sirali()
->take(6)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$video_haberler = Yazi::whereRelation('kategoriler', 'id', $this->video_haber)
->aktif(1)
->sirali()
->take(5)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik', 'giris')
->get();
$roportajlar = Yazi::whereRelation('kategoriler', 'id', $this->roportaj_haber)
->aktif(1)
->sirali()
->take(8)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$analiz_haberler = Yazi::whereRelation('kategoriler', 'id', $this->ozel_haber)
//->yayinTarihi($this->simdi)
->aktif(1)
->sirali()
->take(6)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$cok_okunanlar = Yazi::yayinTarihi($this->onceki_sure, $this->simdi)
->aktif(1)
->yeriDegil(7)
->siraliCokOkunan()
->take(16)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$turkiye = Yazi::whereRelation('kategoriler', 'id', $this->turkiye)
->orWhereRelation('kategoriler', 'ana_kategori_id', 1)
->aktif(1)
->sirali()
->take(6)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$gundemler = Yazi::whereRelation('kategoriler', 'id', $this->gundem)
->aktif(1)
->sirali()
->take(6)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$siyasetler = Yazi::whereRelation('kategoriler', 'id', $this->siyaset)
->aktif(1)
->sirali()
->take(6)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$insan = Yazi::whereRelation('kategoriler', 'id', $this->insan)
->aktif(1)
->sirali()
->take(6)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$dunya = Yazi::whereRelation('kategoriler', 'id', $this->dunya)
->aktif(1)
->sirali()
->take(6)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$kultur = Yazi::whereRelation('kategoriler', 'id', $this->kultur)
->aktif(1)
->sirali()
->take(6)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();
$teknolojiler = Yazi::whereRelation('kategoriler', 'id', $this->teknoloji)
->aktif(1)
->sirali()
->take(6)
->ozellikAl($this->ozel_icerik)
->sonAdresAl()
->resimleriAl()
->select('id', 'baslik')
->get();`
Sorgulardaki scope'lar şöyle;
/**
* @param $query
* @param $value
* @return mixed
*/
public function scopeAktif($query, $value)
{
return $query->where('onay', $value);
}
/**
* @param $query
* @param $value
* @return mixed
*/
public function scopeYeri($query, $value)
{
return $query->where('yer_id', $value);
}
/**
* @param $query
* @param string $value
* @return mixed
*/
public function scopeSirali($query, $value = 'DESC')
{
//return $query->orderBy('yazi.yayin_tarihi', $value);
return $query->latest('yazi.yayin_tarihi');
}
/**
* @param $query
* @param string $value
* @return mixed
*/
public function scopeSiraliCokOkunan($query, $value = 'DESC')
{
//return $query->orderBy('yazi.okunma', $value);
return $query->latest('yazi.okunma');
}
/**
* @param $query
* @return mixed
*/
public function scopeResimleriAl($query)
{
return $query->with([
'resimler' => function ($query) {
$query->select('yazi_resim.yazi_id', 'yazi_resim.resim', 'yazi_resim.klasor', 'yazi_resim.yil', 'yazi_resim.ay');
},
]);
}
/**
* @param $query
* @param $ozel_icerik
* @return mixed
*/
public function scopeOzellikAl($query, $ozel_icerik)
{
return $query->with('kategoriler', function ($q) use ($ozel_icerik) {
$q->where('ana_kategori_id', $ozel_icerik)
->select('id');
});
}
/**
* @param $query
* @return mixed
*/
public function scopeVideoAl($query)
{
return $query->with('video');
}
/**
* @param $query
* @return mixed
*/
public function scopeSonAdresAl($query)
{
return $query->with('sonAdres', function ($q){
$q->select('yazi_adres.yazi_id', 'yazi_adres.adres');
});
}
teşekkürler