在Yii2.0框架中进行软删除

时间:2015-06-29 07:46:32

标签: yii2

我正在使用Yii2.0框架创建一个项目,而我在这个框架中没有得到如何进行软删除。如果我删除任何记录,数据库中该表的Delflag列必须更新为1.但是在核心PHP中,我知道如何操作。

2 个答案:

答案 0 :(得分:3)

是的我找到了上述问题的解决方案:Yii2.0框架中的软删除。

只需转到controllers文件夹下的xyzcontroller.php,然后更改actionDelete()函数,将所需的列值设置为我们想要的值,在我的情况下为DelFlag='9',然后保存模型。

public function actionDelete($id)
{
    $model = $this->findModel($id);
    $model->delFlg = '9';
    $model->save();  // equivalent to $model->update();
    return $this->redirect(['index']);
    // $this->findModel($id)->delete();
}

然后转到模特文件夹中的search()函数,针对该特定模型:searchxyz.php,设置delFlag='0',其结果将被过滤;这就是全部。

答案 1 :(得分:2)

我建议使用这种行为-https://github.com/yii2tech/ar-softdelete

此扩展提供对ActiveRecord的所谓“软”删除的支持,这意味着未从数据库中删除记录,而是用一些标志或状态将其标记,表明该记录不再处于活动状态。

此扩展程序提供[[\ yii2tech \ ar \ softdelete \ SoftDeleteBehavior]] ActiveRecord行为,以支持Yii2中的此类解决方案。您可以通过以下方式将其附加到模型类:

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()分隔方法
  • 更改常规delete()方法