Укажите элемент c первым, а затем отсортируйте остальные элементы в Laravel6 - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь отсортировать свои данные так: указывается 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 Неизвестный столбец« зеленый »в« предложении порядка »».

Так как я могу этого добиться? Спасибо.

1 Ответ

1 голос
/ 06 мая 2020

Попробуйте это как свой orderBy запрос:

$data = $query->orderByRaw("(A like '%$keyword%') DESC")->paginate(4);

попробуйте 'A', если приведенное выше приводит к ошибке столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...