Laravel 事件:更新与更新?

Ada*_*dam 5 php events laravel-5

雄辩模型事件updatingupdated之间有什么区别?

我的猜测是updating在模型更新之前和updated模型更新之后触发。这对我来说意味着updating当我更新模型时应该总是触发 - 即使没有值实际改变。然而,这两个事件似乎仅在事件实际更改了数据库中的值时才会触发。那有什么区别呢?

apo*_*fos 4

模型是否要更新是在实际调用 update 之前确定的。更新事件的目的是在写入数据库之前执行任何任务(并可选择中止更新)。这是有道理的,因为您不希望在更新不会发生时触发声称更新即将发生的事件。

但是,在更新或插入发生之前触发的事件始终是saving听起来像您需要的事件。如果您想要“预更新”事件,请监听该saving事件并检查是否$model->exists(否则保存可能在inserting事件之前)

相关代码位于https://github.com/laravel/framework/blob/edf4bb4e21107c124cd601616ef2b61aaf1c306e/src/Illuminate/Database/Eloquent/Model.php#L544

 if ($this->fireModelEvent('saving') === false) {
         return false;
}
if ($this->exists) {
        $saved = $this->isDirty() ?
                    $this->performUpdate($query) : true;
} /* else insert */
Run Code Online (Sandbox Code Playgroud)

updating和事件的调用updated发生在performUpdate

https://github.com/laravel/framework/blob/edf4bb4e21107c124cd601616ef2b61aaf1c306e/src/Illuminate/Database/Eloquent/Model.php#L609