首页 > 解决方案 > 雄辩的模型事件“更新”在 laravel 7 中没有触发

问题描述

我试图updating在 laravel 7 中捕捉模型事件,但它没有触发。

这是更改模型的地方:

public function update(Request $request, Model $model)  {
  $model->update($request->input());

  return new Resource($model);
}

我也试过这个来更新值:

public function update(Request $request, Model $model)  {
  $model->attribute1 = $request->get('value1');
  $model->attribute2 = $request->get('value2');
  $model->attribute3 = $request->get('value3');
  $model->save();

  return new Resource($model);
}

在这里,我试图在账单模型中捕捉到事件:

protected static function boot() {
  static::updating(function ($model) {
      // code
  });
}

我究竟做错了什么?

标签: laraveleloquentlaravel-7

解决方案


您必须parent::boot()在启动方法开始时调用:

protected static function boot() {

  parent::boot();

  static::updating(function ($model) {
      // code
  });
}

Laravel 7 添加了一个引导方法以使其更容易:

将引导/引导方法添加到模型

目前,扩展 boot 方法以在模型事件上添加事件侦听器的用户必须记住在其方法开始时(或之后)调用 parent::boot()。这经常被遗忘并且给用户造成混乱。通过添加这些简单的占位符扩展点,我们可以将用户指向这些方法,而不需要他们调用任何父方法。

文档

您可以注册在触发各种模型事件时执行的闭包,而不是使用自定义事件类。通常,您应该在模型的引导方法中注册这些闭包:

<?php

namespace App;

use App\Scopes\AgeScope;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The "booted" method of the model.
     *
     * @return void
     */
    protected static function booted()
    {
        static::created(function ($user) {
            //
        });
    }
}

推荐阅读