摘要:一.先完成一下作业-----软删除恢复操作 restore() 1. 先获取到想恢复的被软删除的那条数据 $res = StaffModel::onlyTrashed()->where('staff_id > 0')->find();&
一.先完成一下作业-----软删除恢复操作 restore()
1. 先获取到想恢复的被软删除的那条数据
$res = StaffModel::onlyTrashed()->where('staff_id > 0')->find(); 2.恢复数据
$res->restore() //也可以直接链式调用了
二.模型的原理
1.一个模型通常对应一张数据表
2.模型就是负责业务数据和业务逻辑的
3.模型依赖Db类来实现的
4.模型返回一个对象
5.模型本质上就是一个类 继承与think\Model.php
6.模型类通常对应一张数据表,模型对象对应着数据表中的一条记录
7.自动完成,自动转换,自动验证,这些都是模型特有的
三.模型的创建
1.模型类名对应一张数据表名 如staff表 创建模型类Staff.php
2.模型类继承于think\Model.php
3.设置模型类的受保护属性: 表名属性(推荐设置)
protected $table = '表名'
4.设置主键:默认是id 本张表主键为:staff_id
protected $id = 'staff_id'
5. 命令行创建模型类
* cmd中,进入到应用目录根目录 如cd D:\myphp_www\PHPTutorial\WWW\tp51
* cmd中输入 php think make:model index/Staff 模块/模型文件名 模块默认值common和模块目录同级
四.模型的实例化
1.先导入模型类 use 如果模型类与控制器类命名冲突需要设置别名
use app\index\model\Staff as StaffModel; //设置模型类别名
2.使用依赖注入的方式来实例化模型 实际开发中,基本上都是用静态方法完成模型操作 如下
public function instance(StaffModel $staff) //依赖注入
{
dump($staff->getName()); //查看模型名称
//新增一条记录
$staff->name = 'peter';
$staff->sex = 0;
$staff->age=20;
$staff->salary = 4800;
//新增操作
$staff->save();
return '新增成功,id='.$staff->staff_id;
}五.模型查询 返回一个对象
1.1 单条查询 :get(主键/闭包) 静态方法调用
$staff = StaffModel::get(2); dump($staff); //Array
1.2 闭包查询 get() 将闭包传入get中 $query是一个查询对象
$staff = StaffModel::get(function ($query){
$query->where('sex',0)->where('salary','>',8000);
}); 1.3调用查询构造器查询 ::构造器方法() 如下
$staff2 = StaffModel::where('sex',0)
->where('salary','<',8000)
->find();
dump($staff2); 1.4多条记录查询 all(主键列表/闭包) 返回值是多个数组/对象数组
* 主键列表查询
$staffs = StaffModel::all(); //SELECT * FROM `staff` $staffs = StaffModel::all([1,2,3]); //SELECT * FROM `staff` WHERE `staff_id` IN (1,2,3)
* 闭包查询 可以传入更多条件 然后可以使用foreach遍历
$staffs = StaffModel::all(function($query){
$query->where('age','<','30')->where('salary','>',5000); //`age` < 30 AND `salary` > 5000
}); * 使用闭包实现请求变量注入到闭包中 需要在闭包中 use() 外部的请求变量
$age = $this->request->param('age') ?: 40; //获取请求变量age 并设置默认值
$salary = $this->request->param('salary') ?: 3000; //获取请求变量salary 并设置默认值
$staffs2 = StaffModel::all(function($query) use ($age, $salary){ 在闭包中调用外部变量 调用use()
$query->where('age','<',$age)->where('salary','>',$salary); //`age` < 30 AND `salary` > 5000
});六.模型更新 基于查询的,不允许无条件更新
1.基于查询数据
$staff = StaffModel::get(2); //查询数据模型 $staff->name = '龙姑娘'; //更新字段 $staff->save(); //保存数据
2.静态方法更新: update('更新记录','更新条件')
StaffModel::update( ['name'=>'小龙女'], //更新name值为小龙女 ['staff_id'=>2] //更新条件为staff_id = 2 );
3.复杂更新 \think\Db::raw()可以实现数据自增 更新条件闭包传入
StaffModel::update(['salary'=>\think\Db::raw('salary+1000')],
function($query){
$query->where('age','>','50') //age>50
}) 4.查询构造器更新
StaffModel::where('age','>',50)
->data(['salary'=>\think\Db::raw('salary+500')])
->update();七.模型新增
1.save() 也可以新增数据
2.create(数据,字段) 静态调用
$data = [ 'name'=>'沙僧', 'sex'=>0, 'age'=>500, 'salary'=>1999 ]; $filed = ['name','sex','age','salary']; StaffModel::create($data,$filed); //字段参数可以限制传入的字段
3.用查询构造器来插入数据
StaffModel::insert($data)
八.模型删除
1.destroy(主键/主键列表/闭包)
StaffModel::destroy(41); //[ SQL ] SELECT * FROM `staff` WHERE `staff_id` = 41 [ RunTime:0.000000s ] StaffModel::destroy([1,2,3,54,6]); //[ SQL ] DELETE FROM `staff` WHERE `staff_id` = 41 [ RunTime:0.000000s ]
2.闭包删除(删除条件推荐使用闭包) 可以传入更多条件
StaffModel::destroy(function ($query){
$query->where('age','>',80)
->where('salary','<',3000);
}); 3.查询构造器实现删除
StaffModel::where('age','>',35)
->delete();九.软删除:必须在模型中进行配置
1.模型中设置
* 软删除步骤:
* 1.在表中添加一个字段:删除时间(删除标志):delete_time
* 2.在模型类中添加一个属性:$deleteTime = delete_time
* 3.在模型中导入软删除的trait类库:SoftDelete
* 4.最新版支持设置软删除的默认字段值
use think\Model;
use think\model\concern\SoftDelete; //trait方法集
class Staff extends Model
{
use SoftDelete;
//设置数据表的名称
protected $table = 'staff';
//设置主键: 默认为id
protected $pk = 'staff_id';
//设置删除时间的字段
protected $deleteTime = 'delete_time';
//设置软删除字段默认值
protected $defaultSoftDelete = 0;
} 2.软删除操作 设置之后使用destroy(); 软删除后在普通查询中不可见
StaffModel::destroy(1);
3.查询可以看见软删除的 withTrashed()
$res = StaffModel::withTrashed()->where('staff_id<5')->select(); 4.只看被软删除的值 onlyTrashed()
$res = StaffModel::onlyTrashed()->select();
十.恢复指定被软删除的值 restore()
$res = StaffModel::onlyTrashed()->where('staff_id > 0')->find();
$res->restore();
批改老师:天蓬老师批改时间:2018-12-16 15:45:26
老师总结:模型本质上就是将对表的所有操作对象化, 将表中的CURD操作全部封装到一个类中, 软删除本质就是就是用更新代替删除,并在查询时,过滤掉指定删除标记的元素