当前位置:

首页 > 编程开发 > thinkphp排序如何按创建时间排序 配置指南

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

ThinkPHP中按创建时间排序可通过order()方法实现,支持固定排序、多字段组合及带GET参数的动态排序。分页时需传递query参数保持页码。按天聚合可使用orderRaw()配合DATE_FORMAT函数。对于数组数据,可用array_multisort或usort结合strtotime进行排序。时间格式需统一。

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=desc 或 create_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 会抛警告,排序结果也乱套。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 thinkphp
相关文章 更多
thinkphp项目部署指南详解服务器部署步骤
thinkphp项目部署指南详解服务器部署步骤

详细解析ThinkPHP项目在Linux服务器上的部署步骤,包括环境搭建、文件权限、Nginx配置及常见陷阱,提供可复制的代码示例与例外场景分析。

为什么 TP6.0 模型关联为空?with 预加载与查询作用域的使用【ORM】
为什么 TP6.0 模型关联为空?with 预加载与查询作用域的使用【ORM】

ThinkPHP6.0模型关联返回null的常见原因包括:with闭包遗漏外键和主键字段、嵌套预加载语法不兼容低版本、关联方法内部误用with或field导致数据失控,以及全局作用域与软删除未显式处理。通过检查SQL日志、显式声明关键字段、升级版本或改用正确语法、清理关联方法中的查询条件即可解决。

TP6.0 构建支持断点续传的超大附件上传服务【分片】
TP6.0 构建支持断点续传的超大附件上传服务【分片】

在ThinkPHP6.0中实现支持断点续传的超大附件上传,采用分片上传方案。前端按2MB切片并生成唯一chunkId,通过GET请求校验已传分片,用localStorage持久化上传状态。后端控制器接收分片存储,创建upload_status表管理进度,合并时加文件锁并校验MD5,确保生产环境下的可靠性与性能。

thinkphp排序怎么实现动态排序 开发技巧解析
thinkphp排序怎么实现动态排序 开发技巧解析

动态排序时,order()应置于查询链式调用中且必须在paginate()之前;字段和方向需通过白名单硬校验,使用数组语法防SQL注入;分页调用appends()传递参数;多字段排序用关联数组,确保安全稳定。

TP6.0 复杂业务逻辑下事务嵌套的回滚陷阱【DBA】
TP6.0 复杂业务逻辑下事务嵌套的回滚陷阱【DBA】

在复杂业务逻辑中,事务嵌套的回滚问题一直是ThinkPHP开发者容易踩的坑,尤其是TP6.0版本。先说核心结论:TP6.0并不支持真正意义上的嵌套事务。很多人以为调用两次Db::transaction()就能在内部自动管理回滚,实际上这只是一层“伪装”——内层事务的提交或回滚操作会被直接忽略,异常也

thinkphp排序怎么实现倒序排列 教程简单易懂
thinkphp排序怎么实现倒序排列 教程简单易懂

ThinkPHP 实现倒序排列,说穿了就是 order() 方法配合 desc 方向,一句话的事儿,根本不需要什么复杂的循环或额外逻辑。 来看看最直接的方式:用 order('字段名 desc') 搞定。这招的好处是数据库层直接干活,效率高,逻辑也清晰。比如你想让文章列表按照发布时间从新到旧排,那就

TP5.1 项目接入 LDAP 实现后台管理员统一认证【企业】
TP5.1 项目接入 LDAP 实现后台管理员统一认证【企业】

在企业系统逐渐转向统一身份认证的背景下,ThinkPHP 5.1 项目接入 LDAP 实现后台管理员统一认证,是不少团队正在推进的标准化改造。核心思路并不复杂——把框架默认基于数据库的账号校验逻辑彻底换掉,让登录请求直接交给企业 LDAP 目录服务来完成验证。说白了,不是简单改个密码字段,而是要重构

TP5.1 项目启用 HttpOnly 防范 XSS 攻击【安全头】
TP5.1 项目启用 HttpOnly 防范 XSS 攻击【安全头】

在基于TP5.1框架的项目开发中,通过全局配置Cookie的HTTP只读属性、手动设置特定Cookie、修改PHP配置文件强制会话Cookie启用HTTP只读属性,并结合跨站脚本攻击入口过滤,能够有效地防范跨站脚本攻击窃取Cookie,形成多层次纵深防御体系。

TP8.0 基于 JWT 实现单设备登录挤下线功能【单点登录】
TP8.0 基于 JWT 实现单设备登录挤下线功能【单点登录】

在ThinkPHP8.0中,通过Redis存储用户版本号实现JWT单设备登录强制挤下线机制。每次登录时递增版本号并写入JWT令牌,中间件校验版本一致性,若不一致则返回401状态码。登出或后台踢人时删除Redis键值,从而确保旧会话立即失效。

thinkphp排序如何实现联合排序 实战案例教程
thinkphp排序如何实现联合排序 实战案例教程

ThinkPHP联合排序需多字段组合、安全写法与场景适配:用数组order替代字符串防注入,确保安全;置顶排序借助top_weight和orderRaw实现;联表排序优先使用数组写法;用户可选排序需白名单校验映射,防止SQL注入。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Adobe Acrobat Pro macOS版
Adobe Acrobat Pro macOS版
Mac

Adobe Acrobat Pro 是面向办公、法务、财务、教育及出版用户的专业PDF处理软件,可在Mac上创建、编辑、转换、合并和保护文档,并提供OCR文字识别、表单、批注、内容比较、敏感信息遮盖及电子签名功能。

Blender
Blender
Windows、macOS 和 Linux

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

Shapr3D macOS版
Shapr3D macOS版
Mac

Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。

WINDOWS 更多
3ds max(3dmax)
3ds max(3dmax)
Windows

Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

PixTV 网页版
PixTV 网页版
Windows

PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

AutoCAD Windows版
AutoCAD Windows版
Windows

AutoCAD 是 Autodesk 推出的专业计算机辅助设计软件,Windows 版支持精确二维绘图、三维实体与曲面建模、图纸标注、布局发布和任务自动化,并包含多套行业专业化工具组合,适用于建筑、机械、电气、工程建设及制造设计人员。