当前位置: 首页
编程语言
ThinkPHP如何使用ThinkOrm封装_ThinkOrm数据库封装方法【指南】

ThinkPHP如何使用ThinkOrm封装_ThinkOrm数据库封装方法【指南】

热心网友 时间:2026-05-06
转载

一、引入 ThinkOrm 独立包并初始化连接 如果你正在寻找一个轻量、独立且能兼容多种数据库的ORM方案,又不想为了它而引入整个ThinkPHP框架,那么ThinkOrm的封装方案正好能派上用场。它本质上是一个剥离出来的PDO抽象层,开箱即用。具体怎么操作呢?咱们一步步来看。 首先,ThinkOr

一、引入 ThinkOrm 独立包并初始化连接

如果你正在寻找一个轻量、独立且能兼容多种数据库的ORM方案,又不想为了它而引入整个ThinkPHP框架,那么ThinkOrm的封装方案正好能派上用场。它本质上是一个剥离出来的PDO抽象层,开箱即用。具体怎么操作呢?咱们一步步来看。

首先,ThinkOrm是从ThinkPHP 5.1的ORM核心中独立出来的,它支持包括MySQL、Pgsql、Sqlite、SqlServer、Oracle乃至MongoDB在内的多种数据库驱动。最大的好处是,它不依赖任何框架容器,只需要引入自动加载器并完成基础配置,就能立刻跑起来。

第一步,通过Composer安装这个独立包:composer require thinkyaf/thinkorm

第二步,在你的项目入口文件或者服务初始化的地方,引入Composer的自动加载器:require ‘vendor/autoload.php’;

ThinkPHP如何使用ThinkOrm封装_ThinkOrm数据库封装方法【指南】

第三步,使用Db类手动创建一个数据库连接实例。配置方式非常直观,比如连接MySQL:use think\Db; $db = Db::connect([‘type’=>‘mysql’,‘hostname’=>‘127.0.0.1’,‘database’=>‘test’,‘username’=>‘root’,‘password’=>’’]);

完成这三步,你的独立ORM环境就搭建好了。

二、使用查询构造器执行链式操作

连接建立后,怎么操作数据库呢?ThinkOrm提供了一套与ThinkPHP风格高度一致的查询构造器接口。所有操作都从Db::table()开始,它返回一个Query实例,让你可以流畅地进行链式调用。这种方式特别适合那些不需要复杂模型映射的快速查询场景。

来看几个典型的例子:

执行一个基础的条件查询并排序:Db::table(‘user’)->where(‘status’, 1)->order(‘id’, ‘desc’)->limit(10)->select();

插入一条新记录:Db::table(‘user’)->data([‘name’=>‘Alice’,‘email’=>‘a@example.com’])->insert();

更新符合条件的数据:Db::table(‘user’)->where(‘id’, 5)->update([‘last_login’=>date(‘Y-m-d H:i:s’)]);

删除记录,并获取影响的行数:Db::table(‘log’)->where(‘created_at’, ‘delete();

可以看到,语法非常简洁明了,几乎没有任何学习成本。

三、定义模型类并启用 ORM 映射

当然,如果你的业务逻辑更复杂,需要用到数据验证、模型事件、关联关系或者自动时间戳这些高级功能,那么定义独立的模型类就是更好的选择。好消息是,ThinkOrm的模型类可以完全脱离ThinkPHP标准的application目录结构,只要保证命名空间和自动加载规则匹配,放在任何位置都可以。

具体怎么做?

首先,创建一个模型文件,例如User.php,路径可以自定义,比如放在app/model/目录下:

namespace app\model; use think\Model; class User extends Model { protected $table = ‘user’; }

定义好后,在代码中就可以直接使用静态方法进行操作了:app\model\User::where(‘id’, 1)->find();

也可以实例化后操作,模型会自动处理时间戳等字段:$user = new app\model\User(); $user->name = ‘Bob’; $user->sa ve();

还有一个非常实用的功能是软删除。只需在模型中引入对应的Trait并设置删除时间字段,查询时就会自动过滤掉已“删除”的数据:

use think\model\concern\SoftDelete; class User extends Model { use SoftDelete; protected $deleteTime = ‘delete_time’; }

四、配置多数据库连接与读写分离

对于需要应对更高并发或数据分布在不同数据库的场景,ThinkOrm同样提供了灵活的支持。它允许在运行时动态切换连接,无论是为了实现读写分离,还是进行跨库联合查询,都能轻松应对。

关键在于配置和管理多个连接。你可以先定义一个包含主从库信息的配置数组:

$configs = [‘master’=>[‘type’=>‘mysql’,‘hostname’=>‘master.host’],‘sla ve’=>[‘type’=>‘mysql’,‘hostname’=>‘sla ve.host’]];

进行只读查询时,可以显式指定使用从库连接:Db::connect($configs[‘sla ve’])->table(‘user’)->where(‘id’, 1)->find();

对于模型,你可以通过设置connection属性将其绑定到特定的连接配置上:class Order extends Model { protected $connection = ‘master’; }

最后,需要特别注意的是事务操作。事务内的所有数据库操作,必须确保在同一个连接实例上执行,否则会出错。标准的写法是这样的:

$db = Db::connect($configs[‘master’]); $db->startTrans(); try { $db->table(‘account’)->where(‘id’,1)->dec(‘balance’, 100); $db->table(‘log’)->insert([‘action’=>‘deduct’]); $db->commit(); } catch (\Exception $e) { $db->rollback(); throw $e; }

遵循这个模式,就能安全地处理跨表事务了。

来源:https://www.php.cn/faq/2425109.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Debian下Golang跨平台开发方法指南

Debian下Golang跨平台开发方法指南

在Debian系统上,通过Go原生交叉编译、标准库跨平台抽象及合理代码设计,实现“一次编写,多平台运行”。方法包括环境配置、平台差异处理、交叉编译、依赖管理与多平台测试,最终生成稳定静态可执行文件。

时间:2026-07-09 06:54
Express服务器JSON请求体正确解析完整实践指南

Express服务器JSON请求体正确解析完整实践指南

Express应用中发现`req body`显示为`[Object]`,并非JSON解析失败,而是`console log()`默认对象缩略行为所致。使用`JSON stringify()`或`util inspect()`可完整查看数据结构。正确配置`express json()`中间件并设置请求头,即可确保解析成功。生产环境应避免直接输出敏感数据,建议限

时间:2026-07-09 06:54
Java泛型构造惯用模式:工厂模式替代反射与冗余参数

Java泛型构造惯用模式:工厂模式替代反射与冗余参数

Java接口无法声明构造方法,初始化泛型子类型时应使用工厂接口或Supplier函数式接口,避免反射与自引用泛型。工厂模式实现编译期安全、零反射开销、IDE友好,按需选用Supplier或专用工厂接口。

时间:2026-07-09 06:54
Debian系统Golang并发编程入门教程

Debian系统Golang并发编程入门教程

在Debian系统通过包管理器安装Golang,介绍并发编程:Goroutines是轻量级线程,用go关键字启动;Channels用于同步通信,两者结合实现高并发服务。

时间:2026-07-09 06:54
Debian下Golang机器学习库推荐与使用指南

Debian下Golang机器学习库推荐与使用指南

在Debian系统配置Golang环境后,可选用Gorgonia、Gonum和GoLearn等机器学习库。以Gorgonia为例,通过计算图定义线性回归模型,利用梯度下降优化均方误差,训练后即可预测新数据。

时间:2026-07-09 06:54
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜