最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
thinkphp排序如何实现升序 新手操作教程详解
时间:2026-07-14 09:29:51 编辑:袖梨 来源:一聚教程网
ThinkPHP升序排序需用order()方法并校验字段与方向以确保安全。基础写法为User::order('id asc')->select();动态排序须白名单过滤字段和方向;多字段升序用关联数组如['status'=>'asc','create_time'=>'asc'];模型可设protected $order='sort asc'实现默认升序。
ThinkPHP 实现升序排序很简单,关键在于用对方法、避开常见坑——比如直接拼接字符串容易被注入,或字段名没校验导致报错。
基础写法:用 order() 指定字段和 asc
最常用也最直观的方式是调用 order() 方法,并传入字段名加 "asc"(升序):
-
User::order('id asc')->select();→ 按 id 升序查用户 -
Article::order('create_time asc')->limit(10)->select();→ 按发布时间从早到晚取前10条 - 字段名支持模型属性或数据库真实字段名,如
'status'、'title'
安全写法:动态排序必须校验字段和方向
如果排序字段或方向来自用户输入(比如 URL 参数 ?field=name&dir=asc),绝不能直接拼接字符串。要白名单过滤:
- 只允许特定字段:
$allowedFields = ['id', 'name', 'create_time', 'score']; - 只允许合法方向:
$allowedDirs = ['asc', 'desc']; - 取值后校验并 fallback:
$field = in_array($request->param('field'), $allowedFields) ? $request->param('field') : 'id'; - 用数组语法传参:
User::order([$field => $dir])->select();→ ThinkPHP 自动转义,防 SQL 注入
多字段升序:用数组一次定义多个规则
需要先按 A 升序、A 相同时再按 B 升序,就用关联数组写法:
立即学习“PHP免费学习笔记(深入)”;
User::order(['status' => 'asc', 'create_time' => 'asc'])->select();- 等价于 SQL 的
ORDER BY status ASC, create_time ASC - 注意:不能混用字符串和数组写法,例如
['name asc', 'age desc']是旧式写法,推荐统一用键值对格式
模型默认升序:设 protected $order 属性
想让某个模型每次查询都自动按固定字段升序,可在模型类里声明:
-
protected $order = 'sort asc';(TP6 写法) - 或 TP5 中:
protected $resultSetType = 'collection'; protected $order = 'sort asc'; - 这样调用
User::select()就自带升序,无需每次写 order() - 若需临时覆盖,默认排序会被后续 order() 调用替换
相关文章
- 具有审计签字权的职业叫什么 蚂蚁新村1月14日答案最新 07-15
- Eagle如何更换主题 07-15
- 《神探杰克鼠》小内侦探成就解锁指南 07-15
- 生存33天末世联赛如何通关 07-15
- 《神探杰克鼠》薄命贝蒂的点点滴滴成就解锁指南 07-15
- 哪种海洋鱼类会建造精美的几何图形巢穴来求偶 神奇海洋1月14日答案 07-15