首页 > 解决方案 > 使用引导插入数据后如何触发事件?(拉拉维尔)

问题描述

我正在寻找一种在 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 行

有人可以向我指出该代码有什么问题吗?实现这一目标的正确方法是什么?

标签: laravellaravel-5.8

解决方案


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);
    }
}

推荐阅读