Laravel:提供程序无变更时的模型事件

xuo3flqw  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(161)

当更新用户模型(user::update())时,它触发“模型事件”:

  1. User::updating
  2. User::updated
    只有当有一些值的变化,有没有办法触发另一个“事件”,如果没有变化?谢谢
//Provider

public function boot()
{
    User::updated(function ($user) {
        //do something
    });
}
q3qa4bjr

q3qa4bjr1#

您可以使用isDirty()方法检查模型是否已更改,并手动触发事件。例如:

User::updating(function ($user) {
    if ( ! $user->isDirty())
    {
        event(...);
    }    
});

isDirty()的示例

$user = App\User::first();
$user->isDirty();          //false
$user->name = "Test";
$user->isDirty();          //true

但是在updated之前执行此操作,我猜您应该在此处使用updating事件。

ajsxfq5m

ajsxfq5m2#

在这种情况下,使用savingsaved事件。
每次调用save方法时都会触发这两个事件,而不管模型上是否发生了更改。
对于updatingupdated事件,需要更改模型属性,否则Laravel跳过此事件。
这里有一个例子来形象化它,并显示事件的顺序:

$user = User::create();

$user->save();

$user->name = 'test';
$user->save();

$user->save();

以下是事件的顺序:

saving
creating
created
saved

saving
saved

saving
updating
updated
saved

saving
saved

相关问题