ThinkPHP6 是一个广泛使用的 PHP 框架,其 ORM(对象关系映射)模型是其核心功能之一。ORM 模型允许开发者通过面向对象的方式来操作数据库,极大地简化了数据库操作代码,提高了开发效率。
1. ORM 简介
ORM(Object-Relational Mapping)通过定义类及其属性与数据库表及字段之间的映射关系,使开发者可以用面向对象的方式操作数据库。ORM 通常具备以下功能:
- 数据库的 CRUD(创建、读取、更新、删除)操作。
- 自动处理 SQL 注入等安全问题。
- 提供查询构造器,简化复杂查询。
- 支持事务处理。
2. ThinkPHP6 ORM 使用
2.1 数据库配置
在 config/database.php
文件中配置数据库连接信息:
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'test',
// 用户名
'username' => 'root',
// 密码
'password' => '',
// 端口
'hostport' => '3306',
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'tp_',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式数据库需要设置读写分离
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
2.2 创建模型
在 app/model
目录下创建一个新的 PHP 文件,例如 User.php
:
<?php
namespace app\model;
use think\Model;
class User extends Model
{
// 设置当前模型对应的完整数据表名称
protected $table = 'tp_user';
// 读取器:将数据库中的状态值转换为对应的汉字描述
public function getStatusAttr($value)
{
$status = [0 => '禁用', 1 => '正常'];
return $status[$value];
}
// 修改器:将传入的汉字状态转换为对应的数字存储入库
public function setStatusAttr($value)
{
$status = ['禁用' => 0, '正常' => 1];
return $status[$value];
}
}
2.3 使用模型
在控制器或其他地方使用模型进行数据库操作:
<?php
namespace app\controller;
use app\BaseController;
use app\model\User;
class UserController extends BaseController
{
public function index()
{
// 查询所有用户
$users = User::select();
// 查询单个用户
$user = User::find(1);
// 添加用户
$data = [
'name' => '新用户',
'email' => 'newuser@example.com',
'status' => '正常' // 使用修改器
];
$newUser = User::create($data);
// 更新用户
$user = User::find(1);
$user->name = '更新后的用户名';
$user->save();
// 删除用户
$user = User::find(1);
$user->delete();
return json($users);
}
}
3. 复杂查询
ThinkPHP6 的 ORM 还支持复杂的查询构造器,可以链式调用各种方法来构建 SQL 语句:
<?php
// 查询年龄大于 18 的用户
$users = User::where('age', '>', 18)->select();
// 查询名字为 '张三' 并且年龄大于 18 的用户
$users = User::where('name', '张三')->where('age', '>', 18)->select();
// 使用 or 条件查询
$users = User::where('name', '张三')->orWhere('email', 'like', '%example%')->select();
// 分页查询
$users = User::paginate(10);
4. 事务处理
ThinkPHP6 的 ORM 还支持事务处理,确保一组数据库操作要么全部成功,要么全部失败:
<?php
Db::transaction(function () {
// 执行数据库操作
User::create(['name' => '用户A', 'email' => 'userA@example.com']);
User::create(['name' => '用户B', 'email' => 'userB@example.com']);
// 如果中途抛出异常,事务会自动回滚
});
通过这些功能,ThinkPHP6 的 ORM 模型为开发者提供了一个强大且灵活的数据库操作工具,使得开发过程更加高效和安全。