Yii2Tech ar-softdelete 使用教程

Yii2Tech ar-softdelete 使用教程

ar-softdelete Soft delete behavior for ActiveRecord ar-softdelete 项目地址: https://gitcode.com/gh_mirrors/ar/ar-softdelete

1. 项目介绍

Yii2Tech ar-softdelete 是一个为 Yii2 框架提供的 ActiveRecord 扩展,它实现了软删除功能。软删除意味着记录不会被从数据库中实际删除,而是被标记为不再活跃。这种机制在需要保留记录数据,同时又不想让这些记录在应用中显示时非常有用。

2. 项目快速启动

首先,确保你已经安装了 Yii2 框架。接下来,通过 Composer 安装 ar-softdelete 扩展:

php composer.phar require --prefer-dist yii2tech/ar-softdelete

或者在 composer.json 文件中添加以下内容:

"require": {
    "yii2tech/ar-softdelete": "*"
}

然后,在你的模型类中配置 SoftDeleteBehavior 行为:

use yii\db\ActiveRecord;
use yii2tech\ar\softdelete\SoftDeleteBehavior;

class Item extends ActiveRecord
{
    public function behaviors()
    {
        return [
            'softDeleteBehavior' => [
                'class' => SoftDeleteBehavior::className(),
                'softDeleteAttributeValues' => [
                    'isDeleted' => true
                ],
            ],
        ];
    }
}

现在,你可以使用 softDelete() 方法来软删除记录:

$id = 17;
$item = Item::findOne($id);
$item->softDelete();

如果你想恢复删除的记录,可以设置 SoftDeleteBehavior::$useRestoreAttributeValuesAsDefaults 属性为 true,然后使用 restore() 方法。

如果你想将 delete() 方法的行为改为软删除,可以在行为配置中设置 replaceRegularDeletetrue

public function behaviors()
{
    return [
        'softDeleteBehavior' => [
            'class' => SoftDeleteBehavior::className(),
            'softDeleteAttributeValues' => [
                'isDeleted' => true
            ],
            'replaceRegularDelete' => true
        ],
    ];
}

3. 应用案例和最佳实践

查询软删除的记录

为了只查询被软删除的记录或未被删除的记录,可以在查询时添加相应的条件:

$notDeletedItems = Item::find()->where(['isDeleted' => false])->all();
$deletedItems = Item::find()->where(['isDeleted' => true])->all();

或者,你可以使用 SoftDeleteQueryBehavior 行为来简化查询:

public static function find()
{
    $query = parent::find();
    $query->attachBehavior('softDelete', SoftDeleteQueryBehavior::className());
    return $query;
}

然后使用命名范围:

$deletedItems = Item::find()->deleted()->all();
$notDeletedItems = Item::find()->notDeleted()->all();

在关联查询中使用软删除

在关联查询中,你可以使用 innerJoinWith 方法并结合 notDeleted() 范围来确保只获取活动记录的相关数据:

$comments = Comment::find()
    ->innerJoinWith(['item' => function ($query) {
        $query->notDeleted();
    }])
    ->all();

4. 典型生态项目

由于 ar-softdelete 是 Yii2 的一个扩展,它通常与 Yii2 生态中的其他项目一起使用。例如,你可以与 Yii2 的 RBAC(基于角色的访问控制)模块结合使用,以确保即使记录被软删除,用户的权限仍然得到正确管理。此外,它也可以与 Yii2 的其他 ORM 扩展配合使用,如 yiisoft/yii2-authclient 用于社交登录,或 yiisoft/yii2-imagine 用于图像处理。这些项目的结合可以帮助开发者快速构建功能丰富且安全的应用程序。

ar-softdelete Soft delete behavior for ActiveRecord ar-softdelete 项目地址: https://gitcode.com/gh_mirrors/ar/ar-softdelete

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓬虎泓Anthea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值