批改状态:合格
老师批语:
作业内容
实例演示闭包实现查询
闭包:就是一个匿名回调函数,将函数作为参数进行传递。实例代码如下:
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);
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号