ThinkPHP6的ORM模型

ThinkPHP6 是一个广泛使用的 PHP 框架,其 ORM(对象关系映射)模型是其核心功能之一。ORM 模型允许开发者通过面向对象的方式来操作数据库,极大地简化了数据库操作代码,提高了开发效率。

1. ORM 简介

ORM(Object-Relational Mapping)通过定义类及其属性与数据库表及字段之间的映射关系,使开发者可以用面向对象的方式操作数据库。ORM 通常具备以下功能:

  • 数据库的 CRUD(创建、读取、更新、删除)操作。
  • 自动处理 SQL 注入等安全问题。
  • 提供查询构造器,简化复杂查询。
  • 支持事务处理。

2. ThinkPHP6 ORM 使用

2.1 数据库配置

在 config/database.php 文件中配置数据库连接信息:

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 复制代码
<?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 复制代码
<?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 复制代码
<?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 复制代码
<?php
Db::transaction(function () {
    // 执行数据库操作
    User::create(['name' => '用户A', 'email' => 'userA@example.com']);
    User::create(['name' => '用户B', 'email' => 'userB@example.com']);
    // 如果中途抛出异常,事务会自动回滚
});

通过这些功能,ThinkPHP6 的 ORM 模型为开发者提供了一个强大且灵活的数据库操作工具,使得开发过程更加高效和安全。

相关推荐
东鹏特饮6 分钟前
系统运维(传统/通用运维)面试题
开发语言·php
今天要早睡_32 分钟前
C++01_入门基础复习
开发语言·c++
黑马程序员毕设1 小时前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言
多客:duokelijie3 小时前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
1-1=03 小时前
C# 委托与事件
开发语言·c#
Fuyo_11193 小时前
C++ 运行时多态与虚函数机制全面剖析【面试重点】
开发语言·c++·面试
w_zero_one4 小时前
递归算法(一)
java·开发语言·算法
Julien20045 小时前
管理机密(一)
运维·服务器·开发语言·学习方法
Chen_harmony5 小时前
七、STL与string类
开发语言·c++
沐晓时光5 小时前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言