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);

猜你喜欢

转载自blog.csdn.net/K28095/article/details/135275922