繁体   English   中英

Model 观察者在更新时未触发

[英]Model observer is not firing while updating

我在尝试使用观察者时遇到一个问题,即它不会仅在更新的情况下触发观察者。 在其他情况下它工作正常..

我对此进行了一些研究,并找到了一些解决方案,例如直接从 model 调用更新方法,而不是在存储库中,但不幸的是,它对我不起作用。 我找到的解决方案: https://github.com/laravel/framework/issues/11777#issuecomment-170388067

用户观察者
class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        User::observe(UserObserver::class);
    }
}

这是我的AppServiceProvider

// First try
$user = User::findOrFail($id);
$user->update($data);
// Second try
User::findOrFail($id)->update($data);

我在我的 controller 中调用了update方法,如下所示:

array [
  "nationality_id" => "1"
  "birth_date" => "2013-05-26"
  "gender" => "1"
  "job_title" => "Pariatur Sit provideeee"
  "salary" => "5100"
]

这是我的$data数组的示例:

 array [ "nationality_id" => "1" "birth_date" => "2013-05-26" "gender" => "1" "job_title" => "Pariatur Sit provideeee" "salary" => "5100" ]

Laravel 在触发更新之前检查 model 是否已实际更改,因此请确保在保存或更新之前更改 model。

此外,仅当您直接更新 model 时才会触发更新事件。

这意味着这将触发一个事件:

$user = User::findOrFail($id);
$user->update($data);

虽然这样的事情不会

User::where('id', $id)->update($data);

这是设计使然,因为使用更新查询可以一次更新数百万行,因此为所有行触发事件是不现实的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM