Я пытаюсь отсортировать свои данные так: указывается c элемент должен быть первым, а затем отсортировать остальные элементы в laravel.
Итак, в мой случай,
таблица цветов:
id A B
1 cyan deep green
2 green dark red
3 yellow pink
4 red light green
5 blue black
ColorController. php
$keyword = $request->input('keyword');
$query = Color::query();
if(!empty($keyword)){
$query->where('A','like','%'.$keyword.'%')
->orWhere('B','like','%'.$keyword.'%');
$data = $query->orderBy('A', 'ASC')->paginate(4);
затем в строке поиска, если я наберу «зеленый», мой веб-сайт показывает:
cyan(deep green)
green(dark red)
red(light green)
Но я хочу сначала отсортировать элемент, соответствующий столбцу, например:
green(dark red)
cyan(deep green)
red(light green)
Поэтому я переписал контроллер, например:
$data = $query->orderByRaw("IF('A' = $keyword) DESC")->paginate(4);
Но , он просто получает ошибку.
[ дополнительная информация ]
Я также пробовал
$data = $query->orderByRaw("('A' = '%$keyword%') DESC , B asc")->paginate(4);
Это не вызывает ошибки, но ключевое слово $ производится в виде строк, а не переменных. Если я возьму ключевое слово out of $, появится ошибка «SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец« зеленый »в« предложении порядка »».
Так как я могу этого добиться? Спасибо.