Первая запись по id остальные по популярности?
Есть код, который подтягивает записи с базы по популярности:
public function index(Request $request)
{
$colors = Color::where([['in_stock', '=', '1']])
->orderBy('popularity', 'desc')
->get();
return view('color.index', compact('colors'));
}
Как модифицировать, чтобы в случае наличия get-параметра с id и наличие такого id в базе он был первый, а все последующие по популярности?
site.local/?сolor=id
Ответы (1 шт):
Автор решения: Total Pusher
→ Ссылка
Попробуйте это. Тут используется две сортировки, первая - по условию, которая в случае совпадения id выставляет порядок 1, а для остальных - 2. А вторая сортировка уже дополнительно сортирует "двойки".
$colors = Color::where([['in_stock', '=', '1']])
->orderByRaw(sprintf("CASE id
WHEN %d THEN 1
ELSE 2
END", $id)) // ваш ID из запроса
->orderBy("popularity", "desc")
->get();