博客列表 >闭包查询和模板的软删除

闭包查询和模板的软删除

弓长木子的博客
弓长木子的博客原创
2018年05月25日 16:24:45634浏览

实例

<?php
namespace app\index\controller;
use think\Controller;
use app\index\model\Staff as StaffModel;


class Staff extends Controller{
    
    //实例化模型
    public function instance(StaffModel $staff){//采用依赖注入的方式实现模型的实例化
        
        var_dump($staff->getName());//获取当前模型的名称
    }

    //模型的查询
    public function query(){
        //简单查询条件
        $staff = StaffModel::get(2);//查询staff_id=2的数据
        dump($staff);

        //当要查询的条件比较复杂、逻辑线较长时,可以用闭包方式
        //闭包可以理解为用一个匿名函数包裹要添加的条件,函数的返回值就是依据所包裹的条件查询得到的结果
        $staff = StaffModel::get(function($query){//返回满足条件的第一条数据
            $query->where('sex',0)->where('salary','>',6000);
        });
        dump($staff);

        //查询多条数据all()
        $staff = StaffModel::all(function($query){//返回满足条件的所有数据
            $query->where('sex',0)->where('salary','>',6000);
        });
        dump($staff);

        //采用闭包形式将请求变量注入闭包函数中,实现动态数据查询
        $age = $this->request->param('age')?:40;//调用request方法得到请求对象的参数并判断
        $salary = $this->request->param('salary')?:4000;
        $staffs = StaffModel::all(function($query) use($age,$salary){//引入外部变量时需要用到use方法
            $query->where('age','<',$age)->where('salary','>',$salary);
        });
        dump($staffs);
    }


    /*软删除
    *
    *在数据表中新增一个字段delete_time
    *在模型中导入软删除trait类 SoftDelete
    *设置模型属性$deletetime(删除时间字段)
    *设置软删除字段的默认值(可选步骤)
    */
    public function softDelete(){

        StaffModel::destroy(2);

        //软删除后的数据在普通查询中不可见
        $res = StaffModel::where('staff_id < 4')->select();
        dump($res);die;

        //如果想要在查询时看到已被删除的记录,加上回收站方法withtrashed
        $res = StaffModel::withTrashed()->where('staff_id < 5')->select();
        dump($res);die;

        //只看回收站中数据
        $res = StaffModel::onlyTrashed()->select();
        dump($res);

    }

}




?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

    1.闭包是用一个匿名函数进行处理,将处理结果作为回到函数的值使用。闭包查询可以理解为用函数将查询条件包裹起来进行查询,并将查询得到的结果打包返回给查询函数。

    2.模板的软删除功能是用更新代替删除动作,方法就是在数据表中通过添加一个专门的删除命令的提示字符列,使得已执行删除命令的提示字符与未删除的数据有异即可。在查询命令执行的时候,自动在查询语句中增加一个筛选提示字符列的条件,使得已执行删除动作的数据行被过滤从而不显示,而想要找到这一行只需要在查询时按照删除后的提示字符进行查询即可看到被删除(其实是更新)的数据

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议