Herkese merhaba,
Bir arkadaşımın sorgusunda optimizasyona ihtiyacımız var. İkimiz de tıkandık. Sizlere danışmak istedim.
Durumu olabildiğince net anlatmaya çalışacağım.
Amaç;
2 tablomuz var users ve articles kullanıcılardan rolü yazar olan kullanıcıların en son status 1 olan yazısını almak ve sıralamasını yazının oluşturulma tarihine göre yapmak.
'authors' => User::role('Yazar')->whereHas('latestArticle')->with('latestArticle:id,user_id,title,slug,created_at')->orderByDesc(Article::select('created_at')
->whereColumn('user_id', 'users.id')
->orderByDesc('created_at')->published()
->limit(1))->limit(10)->get(['id', 'name', 'username', 'avatar']),
Bu sorgunun oluşturduğu sonuç:
User.php;
public function articles()
{
return $this->hasMany(Article::class);
}
public function latestArticle()
{
return $this->hasOne(Article::class)->latest()->published();
}
Article.php;
public function scopePublished($query)
{
$query->where('status', true)
->where("created_at", '!=', null)
->where("created_at", '<=', Carbon::now()->format('Y-m-d H:i:s'));
}
Optimize hale getirmek için önerilerinize ihtiyacımız var. Şimdiden teşekkürler.