laravel - 使用引导插入数据后如何触发事件?(拉拉维尔)
问题描述
我正在寻找一种在 Eloquent 完成创建后触发事件的方法。
这是我在Branch
模型中的代码:
class Branch extends Model
{
//some code here
public static function boot() {
parent::boot();
self::created(function (HistoryLog $model) {
$model->tag = 'Created';
$model->description = 'This branch was created by '. ucwords(auth()->user()->name());
$model->save();
});
}
}
我想要做的是,我想在创建分支后创建一个history_log 。但是这段代码返回一个错误:
Symfony\Component\Debug\Exception\FatalThrowableError : 传递给 App\Vehicle::App{closure}() 的参数 1 必须是 App\HistoryLog 的实例,给定的 App\Vehicle 实例,在 D:\document\My Documents 中调用\optodph\vendor\laravel\framework\src\Illuminate\Events\Dispatcher.php 在第 347 行
有人可以向我指出该代码有什么问题吗?实现这一目标的正确方法是什么?
解决方案
Laravel 的方式来做到这一点。
创建观察者:
php artisan make:observer BranchObserver --model=Branch
将您的逻辑添加到观察者:
<?php
namespace App\Observers;
use App\Branch;
class BranchObserver
{
/**
* Handle the Branch "created" event.
*
* @param \App\Branch $branch
* @return void
*/
public function created(Branch $branch)
{
// Add your logic here
}
}
注册它AppServiceProvider
:
<?php
namespace App\Providers;
use App\Branch;
use App\Observers\BranchObserver;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Branch::observe(BranchObserver::class);
}
}
推荐阅读
- r - %--% 运算符是做什么的?
- powershell - Powershell splatting:在哈希表中传递 ErrorAction = Ignore
- r - 在 R 数据框中删除带有模式的后缀
- mysql - 试图理解 IN 和 EXISTS 之间的区别
- c++ - 如何在 C++ 中使用空值初始化 char 到 char 的映射?
- xml - 使用 PL/SQL 删除部分 XML
- javascript - JS:不要在有条件的情况下为地图添加价值
- perl - 无法在 Linux 上使用 cpan/cpanm 安装 Net::Pcap
- c# - Bullet Prefab 向玩家面对的相同方向射击
- html - 如何打开带有标签a的图像?