Laravel 利用 observer 类基于状态属性,对进行删除和修改的控制
1 我们知道 Observer 类可以监听模型类的相关事件
1.1 creating, created, updating, updated, saving, saved, deleting, deleted etc.
1.2 利用这些事件,我们可以实现对删除和修改的控制
2 但是,如果判断的依据是本身属性时,这种方法就不妥了
2.1 比如,任务对象有一个状态属性,取值范围:进行中、已完成、已取消。
2.2 如果已完成,则不可删除,且不可修改。
2.3 矛盾来了,在不可修改的情况下,如何变更状态?
3 分析
3.1 Laravel 事件的侦听,基于单个模型,对于查询集合,它们是不会被触发的。
3.2 User::first()->save() (触发)User::where('user_id', 12)->update() (不会触发)
4 矛盾解决方案
4.1 需要事件进行拦截的操作,采用单模型方式。
4.2 绕开事件的操作,采用集合操作方式。
4.3 比如,状态的转换操作,就采用集合方式,避开事件的侦听。