Yii2 updateAll()不触发afterSave()

时间:2017-05-11 06:01:32

标签: php yii2

我在每次插入或更新时都在afterSave方法中实现了一些逻辑。

但是在我使用updateAll()之后没有执行AfterSave。

那么还有其他选择吗?

1 个答案:

答案 0 :(得分:2)

afterSave()被认为是单个记录。 updateAll()以完全不同的方式处理许多记录。所以你不能以这种方式使用afterSave()。想象一下:当你以这种方式更新数千条记录时,需要为每条记录执行afterSave()方法 - 你可能需要像afterSaveAll()那样被调用一次而且只做一次(或者一些)进一步更新,对吧?

当您呼叫ActiveRecord::updateAll()并且您希望事后发生某事(对于所有更新的记录)时,您必须在该呼叫之后明确地执行此操作。或者您可以使用updateAll()修改您正在执行的操作。否则,你必须更详细地告诉我们你想要达到的目标。

或者正如Bizley所评论的那样:如果你知道你只是更新了几条记录,那么你可以在一个循环中完成。因此,您不会使用updateAll(),而是分别更新每条记录,调用save()以及您已实施的afterSave()隐式调用。您可以尝试一下,从性能角度来看可能是可以接受的。