delete.php删除,delete实例删除

模型实例删除:delete( )

1. 功能:将当前数据对象软删除;

该方法属于SoftDelete类,并不是Model类中的,因为这个类优先级高于Model类,所以当前模型调用delete方法时,实际上是被SoftDelete类的delete方法拦截,真正执行的是SoftDelete类中的delete方法,而并不是我们熟悉的Model类的delete方法,一定要注意!

如果不太理解,请回看本章第一课的内容:Traits类的用法详解

2. 步骤:

获取模型实例:数据对象;

删除该对象,即模型实例。

3. 实例演示

一、准备工作

给当前表添加delete_time字段

默认值为NULL,不设置也会自动为NULL,字段类型不可以是TIMESTAMP,因为这个类型的默认值由系统设置,适合于更新字段时间字段。

添加字段SQL语句如下:

ALTER TABLE tp5_staff ADD delete_time DATETIME DEFAULT NULL;

现在表中情况:

392d59b2f659c4cb8546720c2c6dbee9.png

提示:如果某记录被软删除,则delete_time字段就会有值:'删除时间';

修改模型文件 :Staff.php

namespace app\index\model;

use think\Model;

use traits\model\SoftDelete; //导入SoftDelete构件类

class Staff extends Model{

//引入SoftDelete类

use SoftDelete;

//设置自定义删除时间字段名称

protected $deleteTime = 'delete_time';

}

模型代码分析:

protected $deleteTime = 'delete_time';: 该语句设置删除时间字段名称,如果是'delete_time',可以不设置。

软删除字段名默认是:delete_time,如果你的是del_time,必须要加上:protected $deleteTime = 'del_time';,不可省略。

准备工作结束,下面开始进入实例~~

二、实例演示:

控制器:Index.php

namespace app\index\controller;

use app\index\model\Staff;

class Index{

public function index(){

///获取id=1002的模型实例,创建数据对象$data

$data = Staff::get(1002);

//删除当前数据对象

$affected = $data->delete();

//反馈执行结果

echo $affected ? '成功的软删除了'.$affected.'条记录!' : '软删除失败~~';

}

}

运行结果:

成功的软删除了1条记录!

我们更次查看一下数据表:

8465eb763bb388babdb729e006e43c85.png

软删除记录的标志就是:delete_time字段不为NULL,而是删除时间。

下面再演示一下如何查看

正常查询:不显示已软删除的记录

控制器代码:

namespace app\index\controller;

use app\index\model\Staff;

class Index{

public function index(){

//创建查询闭包函数

$closure = function ($query){

$query -> field('id,name,delete_time');

};

//执行查询

$result = Staff::all($closure);

foreach ($result as $data){

dump($data->getData());

}

}

}

查询结果如下:

不包括被软删除的数据

array(3) {

["id"] => int(1001)

["name"] => string(6) "郭靖"

["delete_time"] => NULL

}

array(3) {

["id"] => int(1005)

["name"] => string(9) "欧阳锋"

["delete_time"] => NULL

}

array(3) {

["id"] => int(1006)

["name"] => string(6) "杨康"

["delete_time"] => NULL

}

特殊查询:可以查看已被软删除掉的数据

控制器代码:

namespace app\index\controller;

use app\index\model\Staff;

class Index{

public function index(){

//用SoftDelete类的withTrashed() 方法实现

$result = Staff::withTrashed()

->field('id,name,delete_time') //设置查询条件

-> select(); //输出结果集:对象数组

//遍历对象数组

foreach ($result as $data){

//输出原始数据

dump($data->getData());

}

}

}

这里为什么要用select方法而不是all方法,因为withTrashed() 返回的是数据库查询Query对象,这一点格外注意。当然,最后返回的仍然是对象数组,而不是二维数组,因为这里毕竟是模型Staff调用,而不是Db调用。

查看结果:

包括已被软删除的数据

array(3) {

["id"] => int(1001)

["name"] => string(6) "郭靖"

["delete_time"] => NULL

}

array(3) {

["id"] => int(1002)

["name"] => string(6) "黄蓉"

["delete_time"] => string(19) "0000-00-00 00:00:00"

}

array(3) {

["id"] => int(1005)

["name"] => string(9) "欧阳锋"

["delete_time"] => NULL

}

array(3) {

["id"] => int(1006)

["name"] => string(6) "杨康"

["delete_time"] => NULL

}

4. 总结

这里的delete方法与Model类中的delete方法完全不同,一定要注意。这也是trait类实现PHP多继承的典型应用,课后,请将该实例上机做一遍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值