PHP之ThinkPHP有几种查询?

来源:开发教程作者:越南程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《PHP之ThinkPHP有几种查询?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《PHP之ThinkPHP有几种查询?》有用,将其分享出去将是对创作者最好的鼓励。

在ThinkPHP框架的日常开发中,数据库查询是操作业务数据的核心步骤,框架提供了多种不同的查询方式,适配不同的开发场景和开发者的使用习惯。目前ThinkPHP主流的查询方式主要分为四种,分别是原生SQL查询、数据库类链式查询、模型查询和查询构造器查询,下面逐一介绍每种查询的具体用法。

PHP之ThinkPHP有几种查询?

一、原生SQL查询

原生SQL查询是直接编写SQL语句执行查询的方式,适合处理复杂的联表查询、聚合查询等场景,当需要执行框架封装的查询方法无法覆盖的SQL逻辑时可以使用这种方式。ThinkPHP提供了query方法执行查询操作,execute方法执行写入、更新、删除操作。

<?php
namespace appcontroller;
use thinkfacadeDb;

class UserController
{
    // 原生查询获取用户列表
    public function getList()
    {
        // 查询操作使用query方法
        $list = Db::query("SELECT id, username FROM user WHERE status = 1 LIMIT 10");
        // 写入操作使用execute方法,返回影响行数
        $insertId = Db::execute("INSERT INTO user (username, password) VALUES ('test', '123456')");
        return json($list);
    }
}

二、数据库类链式查询

链式查询是ThinkPHP最常用的查询方式之一,通过调用数据库类的一系列方法拼接查询条件,最终调用查询方法获取结果,代码可读性高,适合大多数常规查询场景。常用的链式方法包括wherefieldorderlimit等。

<?php
namespace appcontroller;
use thinkfacadeDb;

class UserController
{
    // 链式查询获取状态为1的用户列表
    public function getList()
    {
        $list = Db::name('user')  // 指定数据表,无需写表前缀
            ->field('id, username, create_time')  // 指定查询字段
            ->where('status', 1)  // 查询条件
            ->order('create_time', 'desc')  // 排序规则
            ->limit(10)  // 限制查询条数
            ->select();  // 执行查询,返回数据集
        return json($list);
    }
}

三、模型查询

模型查询是基于ThinkPHP的模型类实现的查询方式,模型类和数据表绑定,封装了表相关的逻辑,适合在MVC架构的模型层使用,能够更好的实现业务逻辑封装和代码复用。使用模型查询前需要先定义对应的模型类。

<?php
// 先定义User模型类,路径app/model/User.php
namespace appmodel;
use thinkModel;

class User extends Model
{
    // 指定数据表名,若表名符合规范可省略
    protected $table = 'user';
}

// 控制器中使用模型查询
namespace appcontroller;
use appmodelUser;

class UserController
{
    public function getList()
    {
        // 模型查询,调用模型的方法获取结果
        $list = User::where('status', 1)
            ->field('id, username')
            ->order('id', 'asc')
            ->select();
        // 也可以使用模型的静态查询方法
        $user = User::find(1);  // 查询主键为1的记录
        return json($list);
    }
}

四、查询构造器查询

查询构造器是ThinkPHP提供的一套查询构建工具,本质上和链式查询的逻辑类似,但是支持更灵活的查询条件构建,比如动态拼接条件、构建复杂的where逻辑等,适合需要根据不同参数动态生成查询条件的场景。

<?php
namespace appcontroller;
use thinkfacadeDb;

class UserController
{
    public function getList($username = '', $status = null)
    {
        $query = Db::name('user');
        // 动态拼接查询条件
        if (!empty($username)) {
            $query->whereLike('username', '%' . $username . '%');
        }
        if (!is_null($status)) {
            $query->where('status', $status);
        }
        $list = $query->order('id', 'desc')->paginate(10);  // 分页查询
        return json($list);
    }
}

不同查询方式的对比

为了帮助开发者选择合适的查询方式,下面通过表格对比四种查询的特点:

查询方式适用场景优势劣势
原生SQL查询复杂SQL逻辑、框架方法无法覆盖的查询灵活度高,可编写任意SQL可读性较差,容易出现SQL注入风险
链式查询常规简单查询、快速开发代码简洁,可读性好,无需定义模型复杂条件拼接不够灵活
模型查询MVC架构开发、业务逻辑封装封装性好,支持模型关联、事件等特性需要提前定义模型类,简单查询略显繁琐
查询构造器查询动态条件查询、复杂条件拼接条件拼接灵活,适配多参数查询场景和链式查询差异较小,学习成本略高

实际开发中可以根据具体需求选择对应的查询方式,常规简单查询优先使用链式查询或者模型查询,复杂SQL场景使用原生查询,需要动态拼接条件时选择查询构造器即可。

ThinkPHP数据库查询链式查询原生查询模型查询修改时间:2026-06-09 04:57:23

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。