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 模型为开发者提供了一个强大且灵活的数据库操作工具,使得开发过程更加高效和安全。

相关推荐
Xiaoyu Wang3 分钟前
Go八股(Ⅴ)map
开发语言·后端·golang
悄悄敲敲敲3 分钟前
C++:异常
开发语言·c++
co0t8 分钟前
计算机组成与原理(2) basic of computer architecture
java·开发语言
Da_un22 分钟前
MATLAB求解带绝对值的规划问题
开发语言·matlab
MATLAB代码顾问23 分钟前
MATLAB绘制克莱因瓶
开发语言·matlab
Xing-Zhuang31 分钟前
C++笔记
开发语言·c++·笔记
查理不安生1 小时前
【Mac】卸载JAVA、jdk
java·开发语言·macos
Black蜡笔小新2 小时前
H.265流媒体播放器EasyPlayer.js视频流媒体播放器关于直播流播放完毕是否能监听到
开发语言·javascript·h.265