Merhaba arkadaşlar.
Geliştirdiğim bir uygulamada Twitter benzeri bir takip mekanizması var. Kullanıcılar birbirlerini takip edip bağlantıya geçebiliyor. Bu takip olayı user_followers isimli bir tabloda kayıtlı tutuluyor.
User modelimde takipçi ve takip edilenleri şu şekilde tanımladım:
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function follower()
{
return $this->belongsToMany('\App\User', 'user_followers', 'followed_id', 'follower_id');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function followed()
{
return $this->belongsToMany('\App\User', 'user_followers', 'follower_id', 'followed_id');
}
Mesela aktif kullanıcıyı takip edenlere:
auth()->user()->follower
takip ettiklerine de:
auth()->user()->followed
şeklinde erişebiliyorum.
Şimdi ben aktif kullanıcıya takip etmesi için kişi önerisinde bulunmak istiyorum. Bunun için söyle birşey yaptım:
$ids = [auth()->user()->id];
if ($user->followed) {
foreach ($user->followed as $item) {
$ids[] = $item->id;
}
}
$suggest_users = User::whereNotIn('id', $ids)->orderBy(DB::raw('RAND()'))->take(5)->get();
Burada takip ettiğim kullanıcıların id'lerini ve kendi id'sini $ids isimli dizide depoluyorum ve $suggest_users sorgusuyla bu id'ye sahip kullanıcılar haricindeki kullanıcılardan rastgele 5 tanesini getirebiliyorum. Yalnız bu yol, aktif kullanıcının takip ettiği kişi sayısı arttıkça performans sorunu oluşturur diye düşünüyorum. Bunun için eloquent tarafında daha kısa bir yol var mıdır?
Aktardığınız bilgiler için şimdiden teşekkürler.