如何在使用引导插入数据后触发事件? (laravel)
How to fire an event after data inserted using boot? (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。
但是这段代码returns出错了:
Symfony\Component\Debug\Exception\FatalThrowableError : Argument 1 passed to
App\Vehicle::App{closure}() must be an instance of App\HistoryLog, instance of
App\Vehicle given, called in D:\document\My Documents\optodph\vendor\laravel\fr
amework\src\Illuminate\Events\Dispatcher.php on line 347
有人可以指出该代码有什么问题吗?实现这一目标的正确方法是什么?
$model 是创建的新记录。是 App\Vehicle
的实例而不是 App\HistoryLog
。
工作代码可能如下所示:
class Vehicle extends Model
{
//some code here
public static function boot() {
parent::boot();
self::created(function ($model) {
App\HistoryLog::create([...]);
});
}
}
您也可以通过 Eloquent 观察者 https://laravel.com/docs/5.8/eloquent#observers
来实现
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);
}
}
我正在寻找一种在 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。 但是这段代码returns出错了:
Symfony\Component\Debug\Exception\FatalThrowableError : Argument 1 passed to App\Vehicle::App{closure}() must be an instance of App\HistoryLog, instance of App\Vehicle given, called in D:\document\My Documents\optodph\vendor\laravel\fr amework\src\Illuminate\Events\Dispatcher.php on line 347
有人可以指出该代码有什么问题吗?实现这一目标的正确方法是什么?
$model 是创建的新记录。是 App\Vehicle
的实例而不是 App\HistoryLog
。
工作代码可能如下所示:
class Vehicle extends Model
{
//some code here
public static function boot() {
parent::boot();
self::created(function ($model) {
App\HistoryLog::create([...]);
});
}
}
您也可以通过 Eloquent 观察者 https://laravel.com/docs/5.8/eloquent#observers
来实现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);
}
}