Tweeterdakı gibi armada önce takip ettiğim kişilerin çıkmasını istiyorum.
$search = preg_replace('/[+\-*><()~"@]/', '', trim(request('search')));
$search = htmlspecialchars($search, ENT_QUOTES, 'UTF-8');
if(!$search) {
return response()->json([]);
}
$search .= '*';
$users = User::query()
->selectRaw('id, username, name, profile_photo_path, MATCH(username, name) AGAINST(? IN BOOLEAN MODE) as score', [$search])
->whereFullText(['username', 'name'], $search, ['mode' => 'boolean'])
->orderByDesc('score')
->limit(10)
->get();
şöyle bir kodum var ve bende
$search = preg_replace('/[+\-*><()~"@]/', '', trim(request('search')));
$search = htmlspecialchars($search, ENT_QUOTES, 'UTF-8');
$followedUserIds = auth()->user()->followings->pluck('id')->toArray();
if (empty($followedUserIds)) {
return response()->json([]);
}
$users = User::query()
->selectRaw('id, username, name, profile_photo_path, MATCH(username, name) AGAINST(? IN BOOLEAN MODE) as score', [$search])
->whereFullText(['username', 'name'], $search, ['mode' => 'boolean'])
->orderByRaw("CASE WHEN id IN (" . implode(',', $followedUserIds) . ") THEN 0 ELSE 1 END, score DESC")
->limit(10)
->get();
Bu arama yaptığımda aranan kelimeye göre ilk önce takip ettiğim kişilerin çıkması için koddu fakat düzgün çalışmıyor.
Böyle yapınca eskiden dakik çalışan kodum artık dakika çalışmadı ve sadece ismi yazınca çıkardı sonucu. Ayrıca ilk takip ettiğim kişileride çıkarmıyor.
Ek bilgiler:
public function followers() {
return $this->belongsToMany(User::class, 'following', 'following_id', 'follower_id')->withTimestamps();
}
public function followings() {
return $this->belongsToMany(User::class, 'following', 'follower_id', 'following_id')->withTimestamps();
}