首先要确定具体项目,然后再对Laravel6中的其余项目进行排序

时间:2020-05-06 13:37:54

标签: mysql laravel eloquent

我正在尝试像laravel中的specific item to be first and then to sort the rest of the items那样对数据进行排序。

以我为例,

颜色表:

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)

但是,我想首先对A列匹配项进行排序,例如:

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);

它不会产生错误,但是$ keyword是作为字符串而不是变量生成的。 如果我从$ keyword中取出'',则会产生错误 “ SQLSTATE [42S22]:找不到列:1054'order子句'中的未知列'green'”。

那么我该如何实现呢? 谢谢。

1 个答案:

答案 0 :(得分:1)

尝试作为您的orderBy查询:

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

如果以上情况产生列错误,请尝试'A'