商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > thinkphp排序如何按创建时间排序 配置指南

thinkphp排序如何按创建时间排序 配置指南

  发布于2026-07-11 阅读(0)

扫一扫,手机访问

ThinkPHP 里按创建时间排序,听着简单吧?核心就是那个 order() 方法,指定字段和方向就行。但实际开发中,分页保持、URL 参数传递、搜索器写法、多条件组合……每个细节都可能让你调试半天。直接甩一句 $model->order('create_time desc') 能在 Demo 里跑通,可一旦上了线,跳页重置、参数丢失、时间格式不一致,随便一个都能让你血压升高。

thinkphp排序如何按创建时间排序 配置指南

先别急着写代码,把几个常见场景和踩坑点理清楚,再动手也不迟。

基础排序写法

固定排序最简单,控制器里直接调用就行:

  • 倒序(最新在前):$list = UserModel::where('status', 1)->order('create_time desc')->paginate(10);
  • 升序(最早在前):$list = UserModel::where('status', 1)->order('create_time asc')->paginate(10);
  • 多字段组合:->order('create_time desc, id desc'),优先按时间排,时间相同再按 ID 排序,避免同秒数据乱跳。

带 GET 参数的动态排序(点击表头切换)

如果用户想点一下“创建时间”表头就切换排序方向,那就要前端传参 create_time=desccreate_time=asc,后端用搜索器来响应。具体步骤:

  • 模型里定义搜索器:public function searchCreateTimeAttr($query, $value) { return $value ? $query->order('create_time', $value) : ''; }
  • 控制器调用:UserModel::withSearch(['create_time'], request()->param())->paginate(['query' => request()->param()])
  • 模板链接里一定把当前页码带上,不然点一下排序就回到第一页:{:url('user/index', ['create_time' => $orderRule, 'page' => input('page', 1)])}

这里的 query 参数是分页保持的命门,漏了它,所有排序都会导致页码重置。

按日期(非精确到秒)分组排序

如果需求是“按天聚合再排序”,比如同一天的数据排在一起,那直接用 create_time 字段就没办法了——得用 SQL 函数把时间截到天。此时 orderRaw() 登场:

  • 写法:->orderRaw("DATE_FORMAT(create_time, '%Y-%m-%d') desc, create_time desc")
  • 实际生成 SQL 就是:ORDER BY DATE_FORMAT(create_time, '%Y-%m-%d') DESC, create_time DESC
  • 注意:这个写法依赖 MySQL,并且 create_time 字段得是 datetime 或 timestamp 类型。

数组内时间排序(非数据库查询)

有时候数据来源不全是数据库,比如你查了库又调了 API,把结果合并到一个数组里,这时候就得用 PHP 原生的排序函数。核心是提取时间戳再排序:

  • 先取出所有时间字段:$timestamps = array_column($data, 'create_time');
  • array_multisort 降序:array_multisort(array_map('strtotime', $timestamps), SORT_DESC, $data);
  • 或者用 usort 更灵活:usort($data, function($a, $b) { return strtotime($b['create_time']) - strtotime($a['create_time']); });

注意时间字段的格式必须统一 Y-m-d H:i:s 或时间戳,否则 strtotime 会抛警告,排序结果也乱套。

本文转载于:https://www.php.cn/faq/2809098.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注