看来laravel boot Trait不起作用

时间:2019-06-01 13:37:58

标签: php laravel events model traits

最近我在使用特征时遇到了问题,我以前创建了一些特征,似乎可以使用,但是现在我又创建了一个特征来对创建事件进行操作,就是这样

trait Contributes
{

public static function bootContributes()
{
    static::creating(function ($model) {
        if (!$model->getKey())
        {
            Contribution::create([
                'contributing_id' => $model->id,
                'contributing_type' => $model->class_table,
            ]);
        }
    });
}

}

并且我将其包含在多个模型中,例如use Contributes;,我认为我对此一无所知。

我在特征中尝试了dd($model);,它在事件外部有效,但在事件内部无效

2 个答案:

答案 0 :(得分:0)

为什么命名函数bootContributes()? Laravel不知道必须执行这种方法。

在您的特征中使用它:

 protected static function boot()
    {
        parent::boot();
        static::creating(function ($model) {
            if (!$model->getKey())
            {
                Contribution::create([
                    'contributing_id' => $model->id,
                    'contributing_type' => $model->class_table,
                ]);
            }
        });
    }
 }

答案 1 :(得分:0)

代替上述方法,我认为这是一种更好的做法,并且与laravel一起使用时效果更好:

public static function boot()
{
    self::created(
        function($model)
        {
            Contribution::create([
                'contributing_id' => $model->id,
                'contributing_type' => $model->table
            ]);
        }
    );
}