博客列表 >闭包查询及软删除功能实例-5月24日作业

闭包查询及软删除功能实例-5月24日作业

日薪月e的博客
日薪月e的博客原创
2018年05月30日 08:39:50653浏览

作业内容

实例演示闭包实现查询
闭包:就是一个匿名回调函数,将函数作为参数进行传递。实例代码如下:


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

		dump($staff); //dump是框架提供的函数,对输出结果进行了预处理,是数组。
		echo '<hr>';

		\var_dump($staff); //全局的var_dump函数,输出结果是对象。
		echo '<hr>';
		echo $staff['name'],'<br>'; //用数组方式查看
		echo $staff->name,'<br>'; //用对象方式查看

		//用闭包来创建查询条件
		//查询性别是男,工资大于8000的用户
		$staff = StaffModel::get(function($query){
			$query->where('sex',0)->where('salary','>',8000);
		});

		echo '性别为男,工资大于8000的员工信息<br>';
		dump($staff);

		echo '<hr>';

		//2.多条记录查询 all(主键列表/闭包)
		//返回值是多个数组/对象数组
		
		//采用闭包来实现将请求变量注入到闭包条件中
		// $this->request  请求对象
		// 通过外部获取请求变量
		$age = $this->request->param('age') ?: 40;
		$salary = $this->request->param('salary') ?: 4000;

		//闭包
		$staffs = StaffModel::all(function($query) use ($age,$salary){
			$query->where('age','<',$age)->where('salary','>',$salary);
		});

		dump($staffs);
	}

运行实例 »

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

实例实现软删除功能并详细写出软删除的步骤

软删除步骤:

1).在表中添加一个字段:删除时间(删除标志):delete_time

2).在模型中添加一个属性:$deleteTime = 'delete_time'

3).在模型中导入一个软删除的trait类库:SoftDelete

4).最新版本还支持设置软删除的默认字段值,不设置默认为null

实例代码如下:

模型配置

<?php
namespace app\index\model;

use think\model\concern\SoftDelete; //导入软删除的trait类库
use think\Model;

class Staff extends Model
{
	use SoftDelete;
	//设置数据表的名称
	protected $table = 'staff';

	//设置主键:默认id
	protected $pk = 'staff_id';

	//设置删除时间的字段名:
	protected $deleteTime = 'delete_time';

	//设置软删除字段的默认值:
	protected $defaultSoftDelete = 0;
	
}
软删除方法如下:

public function softDelete()
	{
		StaffModel::destroy(1);
		// UPDATE `staff` SET `delete_time` = 1527571925 WHERE `staff_id` = 1 
		
		//软删除的数据在普通查询中不可见
		// $res = StaffModel::where('staff_id','<',5)->select();
		// dump($res);

		//如果想在查询的时候看到已经被软删除的记录
		// $res = StaffModel::withTrashed()->where('staff_id','<',5)->select();
		// dump($res);
		//SELECT * FROM `staff` WHERE ( `staff_id` < 5 ) AND `staff`.`delete_time` = '0' 
		//
		//只查询回收站:
		// $res = StaffModel::onlyTrashed()->select();
		// dump($res);
		//SELECT * FROM `staff` WHERE `staff`.`delete_time` <> '0'
		//
		//恢复回收站数据
		$res = StaffModel::onlyTrashed()->find(1);
		$res->restore();
		//UPDATE `staff` SET `delete_time` = 0 WHERE ( `staff_id` = 1 ) AND `delete_time` <> 0 
		$staff = StaffModel::get(1);
		dump($staff);
	}

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