ThinkPHP5.1中规范查询方式是定义继承think\Model的模型类,如User::find(1)查单条、select()查多条,支持链式条件、字段、排序、分页及关联查询;无模型时可用db()或Db::name()助手函数。

用模型类直接查询单条或批量数据
在 ThinkPHP5.1 中,最规范的方式是定义继承 think\Model 的模型类,比如 User 模型对应 user 表。模型定义后,可直接调用静态方法查询:
-
User::find(1):按主键查单条,不存在返回null -
User::findOrFail(1):查不到则抛出DataNotFoundException异常 -
User::findOrEmpty(1):查不到返回空数组(v5.1.23+ 支持) -
User::where('status', 1)->select():查多条,返回二维数组;查不到时返回空数组 -
User::where('status', 1)->selectOrFail():查不到同样抛异常
带条件、字段和排序的链式查询
模型支持完整的链式操作,所有条件、字段、排序等都可叠加:
-
field()控制返回字段:User::field('id,username,email')->select(),也支持别名写法field(['id'=>'uid', 'username'=>'name']) -
where()支持多种格式:where('id', '>', 10)、where(['status'=>1, 'type'=>2])、where('name', 'like', '%admin%') -
order()排序:order('create_time', 'desc')或order(['sort'=>'asc', 'id'=>'desc']) -
limit()和page()分页:paginate(15)自动处理分页参数,limit(10, 20)手动截取
关联查询:一对多、多对一、多对多
模型间通过定义关联方法实现自动 JOIN 或子查询,无需手写 SQL:
- 一对多(如用户→订单):在
User模型中定义public function orders() { return $this->hasMany('Order', 'user_id'); },控制器中用User::with('orders')->select() - 多对一(如订单→用户):在
Order模型中定义public function user() { return $this->belongsTo('User', 'user_id'); },再用Order::with('user')->select() - 多对多(如用户↔角色):中间表为
access,User::with('roles')->find(1)即可获取该用户所有角色,前提是User模型中有belongsToMany('Role', 'access', 'role_id', 'user_id')
快速查询:db() 助手函数与 name/table 区别
不建模型时,可用助手函数快速查表:
-
db('user')->where('id', 1)->find()等价于Db::name('user')->where('id', 1)->find(),自动加配置的表前缀(如tp_user) -
Db::table('tp_user')->where('id', 1)->find()必须写完整表名,绕过前缀配置,适合跨库或临时表 -
value('username')取单字段值,column('username')取一列值成索引数组,column('username', 'id')以 id 为键组织结果
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











