新增
(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);