我在每次插入或更新时都在afterSave方法中实现了一些逻辑。
但是在我使用updateAll()之后没有执行AfterSave。
那么还有其他选择吗?
答案 0 :(得分:2)
afterSave()
被认为是单个记录。 updateAll()
以完全不同的方式处理许多记录。所以你不能以这种方式使用afterSave()
。想象一下:当你以这种方式更新数千条记录时,需要为每条记录执行afterSave()
方法 - 你可能需要像afterSaveAll()
那样被调用一次而且只做一次(或者一些)进一步更新,对吧?
当您呼叫ActiveRecord::updateAll()
并且您希望事后发生某事(对于所有更新的记录)时,您必须在该呼叫之后明确地执行此操作。或者您可以使用updateAll()修改您正在执行的操作。否则,你必须更详细地告诉我们你想要达到的目标。
或者正如Bizley所评论的那样:如果你知道你只是更新了几条记录,那么你可以在一个循环中完成。因此,您不会使用updateAll()
,而是分别更新每条记录,调用save()
以及您已实施的afterSave()
隐式调用。您可以尝试一下,从性能角度来看可能是可以接受的。