博客列表 >闭包实现查询与软删除--2018年5月24日

闭包实现查询与软删除--2018年5月24日

笨鸟先飞
笨鸟先飞原创
2018年05月25日 19:00:39688浏览



实例

<?php 
namespace app\index\controller;

use think\Controller;
use app\index\model\Staff as StaffModel;//设置别名以免冲突

class Staff extends Controller
{
    //实例化模型
    public function instance(StaffModel $staff)
    {
    	 // $staff = new StaffModel; //模型实例化
         dump($staff->getName());  //查看模型名称


         //新增一条记录
         $staff->name = '抖音小王子';
         $staff->sex = 1;
         $staff->age = 25;
         $staff->phone_number = 12598875435;

         //新增操作
         $staff->save();
         return '成功添加一条记录,id='.$staff->id;

         //实际开发中,基本上都是用静态方法完成模型操作
    }



    //模型查询
    public function query()
    {
    	//1.单条记录:get(主键、闭包)
    	//闭包:就是一个匿名回调函数,将函数作为参数进行传递
    	//
    	//
    	//new StaffModel
    	// $staff = StaffModel::get(2);//模型返回值是对象

    	// dump($staff);//array
    	// echo "<hr>";
    	// var_dump($staff);//object
    	// echo '<hr>';
     //    echo $staff['name'];
     //    echo '<br>';
     //    echo $staff->name;
     //      echo '<hr>';



     //    //用闭包来创建查询条件
     //    $staff = StaffModel::get(function($query){
     //         $query->where('id','>',10)->where('age','>',50);
     //    });
     //    echo 'ID大于10,年龄大于50的员工信息';
     //    dump($staff);
     //     echo '<hr>';

     //    //直接静态调用Db类的查询构造器进行查询
     //    // StaffModel == Db::table('staff');
     //    $staff = StaffModel::where('id','>',10)
     //              ->where('age','>',50)
     //              ->find();
     //    dump($staff);



        //2.查询多条记录,all(主键列表/闭包)
        //返回值是多个数组/对象数组
           
        // $staffs = StaffModel::all(); //不传参数,查询的是所有数据
        // $staffs = StaffModel::all([1,2,3]);// 查询的是主键为1.2.3的数据  SELECT * FROM `staff` WHERE `id` IN (1,2,3) 
        // 
         
        // 闭包方式传入查询条件
        $staffs = StaffModel::all(function($query){
        	$query->where('sex','=',0)->where('age','>',40)->field(['name','age','sex']);
        });
       // var_dump($staffs);
        foreach ($staffs as $staff) {
        	echo '姓名:'.$staff->name.'<br>';
        	echo '年龄:'.$staff->age.'<br>';
        	echo '性别:'.$staff->sex.'<hr>';      
        }


       echo '<br>';
        //采用闭包来实现将请求变量注入到闭包条件中 也就是把条件的值用一个变量来替代 , 
        //可在URL中传值实现动态查询 
        //$this->request : 请求对象
        $sex = $this->request->param('sex') ?: 1;
        $age = $this->request->param('age') ?: 40;

        $staffs = StaffModel::all(function($query) use($sex,$age) {
        	$query->where('sex','=',$sex)->where('age','>',$age)->field(['name','age','sex']);
        });
        dump($staffs);
    }


    public function update()
    {
    	//基于查询的,不允许无条件更新  //先是查询再更新
    	
        // $staff = StaffModel::get(4); 
        // $staff->name = '王麻子';
        // $staff->save();
        // 
        // 
        // 
        // 静态方法:update(数据,条件,字段)、、一般只用到前两个参数,数据就是需要改成的目标
        // StaffModel::update(
        // 	['name'=>'李刚'],
        //     ['id'=>8]
        // );
        // 
        // 
        // 复杂更新
        // 将id大于20的员工年龄加上5岁
        // StaffModel::update(
        // 	['age'=>\think\Db::raw('age+5')],
        // 	function($query){
        // 		$query->where('id','>',20);
        // 	}
        // );
         
         //也可以用查询构造器来更新数据
         // StaffModel::where('id','>=',20)->data('age',\think\Db::raw('age+1'))->update();
         StaffModel::where('id','>=',20)->data(['age'=>\think\Db::raw('age+5')])->update();

    }


    //创建模型:添加数据
    public function create()
    {
    	//save()
    	//create(数据,字段) 允许添加的字段    静态方法
    	$data = [
    		'name'=>'孙悟空',
    		'sex'=>0,
    		'age'=>100,
    		'phone_number'=>125487824
    	];

    	// $field =['name','sex','age','phone_number'];
    	// $field =['name','sex','age'];

    	// StaffModel::create($data,$field);
    	// 
    	// 
    	// 查询构造器添加数据
    	StaffModel::insert($data);

    }



    //模型删除:删除记录
    public function delete()
    {
    	//静态方法 destroy(主键,主键列表,闭包)
    	// StaffModel::destroy(28);
    	// StaffModel::destroy([1,2,3]);

    	// SELECT * FROM `staff` WHERE `id` = 28
     //    DELETE FROM `staff` WHERE `id` = 28  先查询ID=28的这条记录再删除
     //    
     // 删除条件推荐使用闭包
     StaffModel::destroy(function($query){
     	$query->where('age','>',50)->where('id','>',23);
     });   


     //查询构造器实现删除
     StaffModel::where('age','>',50)
               ->where('id','>',23)
               ->delete();
     
    }

    //软删除:必须在模型中进行配置 也就是更新模拟删除,增加了一个字段delete_times时间戳
    public function softDelete()
    {
    	// StaffModel::destroy(1);
    	
    	//软删除的数据在普通查询中不可见
    	// $res = StaffModel::all();
    	// dump($res);
    	// 
    	
    	//如果想在查询的时候看到已经被删除的记录
    	// $res = StaffModel::withTrashed()->select();
    	//$res = StaffModel::withTrashed()->select();
    	
    	//只看回收站:
    	$res = StaffModel::onlyTrashed()->select();
    	dump($res);
    }
    
     public function restore(StaffModel $staff)
    {
    	//恢复软删除的数据
    	
    	$res = $staff->restore(['id'=>1]);
    	echo $res ? '恢复成功' : '失败';
    }

   
}

运行实例 »

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


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