ThinkPHP8 使用模型处理数据库CURD

ThinkPHP8 使用模型处理数据库CURD

新增

(1)首先使用 use think\Model\模型名称; 引入模型 例如use app\index\model\User;

use app\index\model\User;

(2)实例化模型$user = new User;也可以是$user = new User();括号可加可不加

(3)使用save方法 前面DB类讲过 这个方法既可以新增也可以更新

(4)使用模型时会自动给时间字段create_time(创建时间)update_time(更新时间)填充时间信息

$user = new User;  

$user->name = '张志伟';
$user->gender = '男';
$user->age = 38;
$user->details = '我是一个好人';

// 成功返回 True 失败抛出异常
echo $user->save();

(5)使用allowField方法来限制只允许插入哪些字段

一、插入了不允许的字段依旧会执行成功 不过该字段的值会是Null 也就是空

$user = new User;

$data1 = ['name', 'age', 'gender'];
$data2 = [
    'name' => '张三',
    'age' => 25,
    'gender' => '男',
    'details' => '我是一个农民'
];

echo $user->allowField($data1)->save($data2);

(6)使用replace方法来自动判断新增还是更新

一、与之前的replace介绍一样 如果id存在那么更新数据 如果不存在那么就插入数据

$user = new User;

$data1 = ['id', 'name', 'age', 'gender'];
$data2 = [
    'id' => 108,
    'name' => '张三',
    'age' => 25,
    'gender' => '男',
    'details' => '我是一个农民'
];

echo $user->replace()->allowField($data1)->save($data2);

(7)使用对象名->id来获取插入成功后的 id数

一、首先id必须是主键 其次返回的是当前数据的 id 并不是受影响的行数

$user = new User;

$data1 = ['id', 'name', 'age', 'gender'];
$data2 = [
    'id' => 200,
    'name' => '张三',
    'age' => 25,
    'gender' => '男',
    'details' => '我是一个农民'
];

$user->replace()->allowField($data1)->save($data2);

return $user->id;

(8)使用saveAll来进行批量插入

$user =  new User;
$data1 = [
    'name' => '小明',
    'age' => 38,
    'gender' => '男',
    'details' => '我是小明'
];

$data2 = [
    'name' => '汤姆',
    'age' => 38,
    'gender' => '男',
    'details' => '我是汤姆'
];
$user->saveAll([$data1, $data2]);

(9)使用create来进行静态方式插入

一、此方式不再需要实例化模型$user = new User 而是直接使用模型名::create进行插入 该方式是较为常用的方式

二、该方法具有三个参数(可以只写第一个参数省略后两个): 1、插入的数据(一维数组) 2、允许插入的字段(一维数组) 3、是否启用replace(布尔值)

三、是否启用replace 这个replace和以前的replace一样 都是插入的数据包含id主键那么更新数据 否则插入数据

$data = [
    'name' => '小会',
    'gender' => '女',
    'age' => 25,
    'details' => '我是一个女孩子',
];

$data2 = ['name', 'gender', 'age', 'details'];

User::create($data, $data2, false);

删除

一、由于删除数据是由传入的参数进行删除 以下为了演示 查询一条数据出来进行删除

(1)使用delete删除

$user = User::find(1);
echo $user->delete();

(2)使用静态方法destroy删除

//单条删除
return User::destroy(37);

//批量删除
return User::destroty([1, 2, 3, 4, 5, 6, 7]);

//条件删除
return User::where('id', '>', 15)->delete();

(2)使用静态方法destroy 以闭包的方式删除数据

一、 以下演示删除id大于100的所有数据

User::destroy(function ($query){
    $query->where('id', '>', 100);
});

更新

(1)使用save方法进行更新

一、将id为2的数据的details字段修改为 我是傻逼

二、更新数据后 数据的update_time也会随之更新

三、save方法只会更新数据有变化的数据 如果你更新的数据和原本的数据一样 那么就不会更新 update_time也不会更新!!

$user = User::find(2);
$user->details = '我是傻逼';
echo $user->save();

(2)使用save方法 根据name(姓名)值进行更新

$user = User::where('name', '张博')->find();
$user->details = '我是张博哈哈';
echo $user->save();

(3)如果更新的数据和原数据一样 使用force方法强行进行更新 也就是更新update_time的数值

$user = User::where('name', '张博')->find();
$user->details = '我是张博哈哈';
echo $user->force()->save();

(4)使用Db的方法Db::raw与模型相结合 实现数据更新时自增

$user = User::where('name', '张博')->find();
$user->age = Db::raw('age + 2');
echo $user->force()->save();

(5)使用saveAll方法 实现批量更新数据 前提是必须传入id 因为save方法 没有id的话就默认是 insert插入语句了

一、因为saveAll方法不可以静态调用 因此必须先要实例化模型

二、返回值是被修改的数据集合

$user = new User;
return $user->saveAll([
    ['id' => 2, 'gender' => '女'],
    ['id' => 3, 'gender' => '女'],
    ['id' => 4, 'gender' => '女']
]);

(6)使用静态方法update更新数据 返回对象实例

一、默认使用方法

return User::update(['id'=>2, 'gender'=>'男']);

二、传入两个参数 第二个参数放id 返回的数据就不会包含id

return User::update(['gender'=>'男'], ['id'=>5]);

**三、传入三个参数 第三个参数为允许修改的字段 以下例子我只允许了修改gender字段 因此name字段会自动为空 **

return User::update(['gender'=>'女', 'name'=>'张志伟'], ['id'=>18], ['gender']);

查询

一、 模型的查询操作和Db的查询操作几乎一模一样

(1)使用find方法查询一条数据

$user = User::find(1);
return json($user);

(2)使用select方法查询所有数据

$user = User::select();
return json($user);

(3)使用select方法查询 1 3 5条数据

$user = User::select([1, 3, 5]);
return json($user);

(4)使用条件(where, order, limit.....)进行查询

一、以下只是部分的条件查询 还有超多的查询条件 可以到手册上面查看 使用方法大差不大

// 查询id小于5的所有数据
$user = User::where('id', '<', 5)->select();
return json($user);

// 将id调整为正序排序 然后查询前三条数据  SQL语句中 正序ASC 倒叙DESC
$user = User::limit(3)->order('id', 'ASC')->select();
return json($user);

//聚合查询 查询数据的条数 一共多少条数据
return User::count();

//like 模糊查询 查询所有姓王的数据
$user = User::whereLike('name', '王%')->select();
return json($user);
  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP框架中,配置数据库需要在`/config/database.php`文件中进行配置。以下是一个基本的数据库配置示例: ```php return [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => 'localhost', // 数据库名 'database' => 'database_name', // 用户名 'username' => 'root', // 密码 'password' => 'root', // 端口 'hostport' => '3306', // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => 'tp_', // 数据库调试模式 'debug' => true, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 'deploy' => 0, // 数据库读写是否分离 主从式有效 'rw_separate' => false, // 读写分离后 主服务器数量 'master_num' => 1, // 指定从服务器序号 'slave_no' => '', ]; ``` 在上面的配置中,需要设置`type`、`hostname`、`database`、`username`和`password`等数据库连接信息。其中,`type`表示数据库类型,`hostname`表示服务器地址,`database`表示数据库名,`username`表示数据库用户名,`password`表示数据库密码。 设置好数据库连接信息后,就可以在应用程序中使用数据库了。例如: ```php use think\Db; // 查询数据 $result = Db::name('user')->where('id', 1)->find(); // 插入数据 Db::name('user')->insert(['username' => 'test', 'password' => '123456']); // 更新数据 Db::name('user')->where('id', 1)->update(['password' => '654321']); // 删除数据 Db::name('user')->where('id', 1)->delete(); ``` 以上示例中,使用了`Db`类来进行数据库操作。`Db::name('user')`表示操作`user`表,`where`方法用于设置条件,`find`方法用于查询单条数据,`insert`方法用于插入数据,`update`方法用于更新数据,`delete`方法用于删除数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值