[英]Laravel. How to order by one field but first get items with specific value of another field?
I got a database with entries.我有一个包含条目的数据库。 Each entry have start date and state fields.每个条目都有开始日期和状态字段。 What I want to do is order entries by start date (done that) but first display ones that have state of 0 then the others (also ordered by start date) i'm also paginating data.我想要做的是按开始日期排序条目(完成),但首先显示状态为 0 的条目,然后显示其他条目(也按开始日期排序)我也在对数据进行分页。 Now order by date and pagination is pretty easy to do, but got no idea how to do that other thing.现在按日期和分页排序很容易做到,但不知道如何做其他事情。
The following build shows state=0
first, then ordered by date descending.以下构建首先显示state=0
,然后按日期降序排列。 You can call either ->get()
or ->paginate()
.您可以调用->get()
或->paginate()
。
$builder = Model::where('something', '>', 'value')
->orderByRaw("IF(`state` = 0, 1, 0) DESC")
->orderBy('date', 'DESC');
return $builder->paginate(15);
To order first ones by date ASC
and the other ones by date DESC
:要按date ASC
订购第一个,然后按date DESC
订购其他的:
$builder = Model::where('something', '>', 'value')
->orderByRaw("IF(`state` = 0, 1, 0) DESC")
->orderByRaw("IF(`state` = 0, date, 1) ASC")
->orderByRaw("IF(`state` = 0, 1, date) DESC");
I just split ordering into 3 different conditions.我只是将订购分成 3 个不同的条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.