模型基本操作总结

原创 2018-12-16 15:39:58 344
摘要:一.先完成一下作业-----软删除恢复操作  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操作全部封装到一个类中, 软删除本质就是就是用更新代替删除,并在查询时,过滤掉指定删除标记的元素

发布手记

热门词条