我正在尝试像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'”。
那么我该如何实现呢? 谢谢。
答案 0 :(得分:1)
尝试作为您的orderBy
查询:
$data = $query->orderByRaw("(A like '%$keyword%') DESC")->paginate(4);
如果以上情况产生列错误,请尝试'A'
。