laravel - 雄辩的模型事件“更新”在 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
});
}
我究竟做错了什么?
解决方案
您必须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) {
//
});
}
}
推荐阅读
- php - php文件被识别但没有输入
- swift - 两个 ios 设备之间的后台扫描和广告
- amazon-web-services - 如何添加 EMR Spark 步骤?
- reactjs - React Typescript - 将道具传递给 Hooks 之间的类型错误
- python - 如何在 django 模板中使用大于运算符
- typescript - 用导出标记函数、打字稿接口或打字稿类型是不好的做法还是有成本,然后再不导入?
- node.js - 服务器受到攻击导致node.js超时错误
- node.js - 如何从我的一个节点获取数据到另一个节点文件?
- javascript - 使用 Javascript 替换 JSON 中的项目
- java - 单发射器 Rx Java 的返回值