phalcon 框架软删除与物理删除思考与实现
在项目开发中,业务的不同则对数据库中数据的操作也是不一样的, 比如有的数据表需要物理删除数据记录, 而有的数据表中的记录需要假删除(软删除), 现在使用的大部分框架都已经实现了对数据的这两种操作. 那么 phalcon 中如何使用呢?
phalcon 中的物理删除 $model->delete();
在 phalcon 中使用 $model->delete();
默认执行的是物理删除, 则数据库中的数据记录被删除.
phalcon 中软删除使用
phalcon 中提供了需要多类似钩子的功能, 我理解的钩子跟中间件的功能类似.
phalcon 中有个方法是添加行为: $this->addBehavior()
1 | <?php |
如此, 在使用$model->delete()
方法的时候, 数据表中对应的字段修改为 status = 'D'
实现了软删除的功能, 但是这样会有什么问题 ? 思考 …
- 这段代码在每一个 model 中, 冗余, 后续优化…
- 那在写的父类里面
BaseModel
去实现, 所有的model
继承BaseModel
都共用, 不错…
以上两点一定要这么做, 优点大家都懂. 那么这样就没有问题了么?
使用 trail 分离代码
根据业务的不同, 数据库中数据的处理也不一样, 有的 model 需要软删除, 而有的 model 需要物理删除. 用下面的方法做:
1 | namespace xxxx; |
在需要使用软删除的 model
中使用:
1 | class Userodel extend Model { |
ModelSoftDeletes
中的 delete方法会覆盖 Model
中的delete 方法, 在调用 $model->delete()
之前给当前的 model
添加软删除的实现.