php - Laravel 查询返回意外订单
问题描述
我正在使用 Laravel Query Builder 来获取一组行,然后按 2 列对它们进行排序,ticket_id
然后id
(以前created_at
)。然而,结果按ticket_id
(正确)排序,但id
(或created_at
)次要顺序不正确。我是否正在接近这个错误的,误解的顺序?
这是我的查询:
$responses = Response::where('status', '=', 'closed');
->select('id', 'ticket_id', 'created_at', 'author_id')
->orderBy('ticket_id', 'id')
->get();
反过来,返回:
0 => array:3 [
"ticket_id" => 14
"id" => 71
"time" => "2018-05-25 08:55:03"
]
1 => array:3 [
"ticket_id" => 14
"id" => 75
"time" => "2018-05-25 12:48:45"
]
2 => array:3 [
"ticket_id" => 14
"id" => 72
"time" => "2018-05-25 08:55:53"
]
3 => array:3 [
"ticket_id" => 13
"id" => 70
"time" => "2018-05-25 08:53:50"
]
4 => array:3 [
"ticket_id" => 13
"id" => 76
"time" => "2018-05-29 12:30:46"
]
5 => array:3 [
"ticket_id" => 13
"id" => 74
"time" => "2018-05-25 11:30:36"
]
您会看到 14 票的顺序是 71、75、72,而不是 71、72、75。
这也是表结构:
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| ticket_id | int(11) | NO | | NULL | |
| author_id | int(11) | NO | | NULL | |
| status | int(11) | NO | | 0 | |
| content | text | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
| assets | text | YES | | NULL | |
+------------+------------------+------+-----+---------+----------------+
解决方案
orderBy()
将列名作为第一个参数,将方向ASC, DESC
作为第二个参数。
orderBy('ticket_id', 'id')
应该orderBy('ticket_id', 'desc')->orderBy('id','desc')
推荐阅读
- spring-boot - 多个 @EnableBinding 与 Kafka Spring Cloud Stream
- c# - 将视图从一个控制器传递到另一个控制器的视图
- ruby-on-rails - 如果轨道中的 X 或 Y 条件
- c# - 每次更改字段时如何使用 NotifyPSEvent 触发事件?
- javascript - 如何在 javascript new Date() 中设置时区
- sql - SQL 中具有多个 WHEN THEN 的 CASE 语句
- sql - 计算未发生特定事件的用户
- python - 从 Selenium Python 中的 Select 以外的下拉菜单中选择
- vue.js - 使用 slot-scope 定义的 slotProps 不适用于 vue.js 2.6.0 中的 v-if
- php - 通过 php 的 sdiff(无外壳)