andrecalistro / cakephp3-soft-delete
CakePHP的软删除插件
1.4.0
2018-09-08 16:47 UTC
Requires
- php: >=5.6
- cakephp/cakephp: ~3.6
- cakephp/plugin-installer: *
Requires (Dev)
README
用途
此Cakephp插件使您能够使您的模型支持软删除。当软删除一个实体时,它实际上并不会从您的数据库中删除。相反,记录上会设置一个deleted
时间戳。
要求
此插件是为cakephp 3.x开发的。
安装
您可以使用composer将此插件安装到您的CakePHP应用程序中。
更新您的composer文件以包含此插件
composer require pgbi/cakephp3-soft-delete "~1.0"
配置
加载插件
// In /config/bootstrap.php
Plugin::load('SoftDelete');
使模型支持软删除
在您的模型Table类上使用SoftDelete特性
// in src/Model/Table/UsersTable.php
...
use SoftDelete\Model\Table\SoftDeleteTrait;
class UsersTable extends Table
{
use SoftDeleteTrait;
...
您的支持软删除的模型数据库表应该有一个名为deleted
的字段,类型为DateTime,默认值为NULL。如果您想自定义此字段,您可以在Table类中声明该字段。
// in src/Model/Table/UsersTable.php ... use SoftDelete\Model\Table\SoftDeleteTrait; class UsersTable extends Table { use SoftDeleteTrait; protected $softDeleteField = 'deleted_date'; ...
使用
软删除记录
delete
和deleteAll
函数现在将使用删除日期填充deleted
字段来软删除记录。
// in src/Model/Table/UsersTable.php $this->delete($user); // $user entity is now soft deleted if UsersTable uses SoftDeleteTrait.
恢复软删除记录
要恢复一个软删除实体到活动状态,请使用restore
方法。
// in src/Model/Table/UsersTable.php // Let's suppose $user #1 is soft deleted. $user = $this->Users->find('all', ['withDeleted'])->where('id', 1)->first(); $this->restore($user); // $user #1 is now restored.
查找记录
find
、get
或动态查找器(如findById
)将只返回非软删除记录。要同时返回软删除记录,$options
必须包含'withDeleted'
。示例
// in src/Model/Table/UsersTable.php $nonSoftDeletedRecords = $this->find('all'); $allRecords = $this->find('all', ['withDeleted']);
硬删除记录
要硬删除单个实体
// in src/Model/Table/UsersTable.php $user = $this->get($userId); $success = $this->hardDelete($user);
要批量硬删除在给定日期之前软删除的记录,您可以使用hardDeleteAll($date)
// in src/Model/Table/UsersTable.php
$date = new \DateTime('some date');
$affectedRowsCount = $this->hardDeleteAll($date);
软删除与关联
SoftDelete插件正确处理关联。
- 软删除将像往常一样级联到相关模型。如果相关模型也使用SoftDelete特性,它们将被软删除。
- 软删除的记录将被排除在计数缓存之外。