1. order 方法(安全的排序方法)
order 是 TP5 封装的安全排序方法,主要用于常规的字段排序,会自动对字段名进行转义处理,防止 SQL 注入,是日常开发中最常用的排序方式。
基本语法:
执行效果:
- // 单个字段排序
- Db::name('user')->order('id', 'desc')->select();
- // 多个字段排序(数组形式)
- Db::name('user')->order(['id' => 'desc', 'create_time' => 'asc'])->select();
- // 链式调用多个order
- Db::name('user')->order('id desc')->order('create_time asc')->select();
以上代码最终生成的 SQL 类似:
可以看到,字段名被自动加上了反引号(`),避免了字段名与 SQL 关键字冲突的问题。
- SELECT * FROM `user` ORDER BY `id` DESC, `create_time` ASC
2. orderRaw 方法(原生排序方法)
orderRaw 用于执行原生的排序 SQL 片段,不会对传入的内容做任何转义处理,适合处理复杂的排序逻辑(如包含函数、表达式的排序)。
基本语法:
执行效果:
- // 带函数的排序(按字段长度排序)
- Db::name('user')->orderRaw('LENGTH(nickname) DESC')->select();
- // 带条件的排序(按自定义规则排序)
- Db::name('user')->orderRaw("FIELD(status, 2, 1, 0) DESC, create_time ASC")->select();
- // 结合参数绑定(推荐,防止注入)
- Db::name('user')->orderRaw('FIELD(id, ?) DESC', [10, 20, 30])->select();
以上代码生成的 SQL 类似:
- -- 按昵称长度排序
- SELECT * FROM `user` ORDER BY LENGTH(nickname) DESC;
- -- 按status自定义顺序排序
- SELECT * FROM `user` ORDER BY FIELD(status, 2, 1, 0) DESC, create_time ASC;
- 传入的原生 SQL 片段会直接拼接,无任何转义。

















文章点评