Laravel,特征是在保存期间创建其他记录?

时间:2018-11-11 16:53:25

标签: php laravel laravel-5 traits laravel-5.6

我想在laravel中保存模型时在数据库中保存其他记录,我的模型如下:

class Document extends Model
{
    use DocumentSetup;
}

我的特质看起来像:

trait DocumentSetup {
    protected static function boot()
    {
        static::saving(function ($model) {
            $documentSetup = new DocumentSetup();
            $documentSetup->document_id = $model->id;
            $documentSetup->is_public = false;
            $documentSetup->need_verification = true;
            $documentSetup->save();
        });

        parent::boot();
    }
}

如果我尝试没有任何错误,但是未创建文档或文档设置,那么有人知道我在做什么错吗?

我的想法是在保存时创建此附加模型...

1 个答案:

答案 0 :(得分:2)

在对Eloquent生命周期挂钩使用特征时,必须在案例boot[traitName]中命名引导方法bootDocumentSetup。您还应该删除特征中的parent::boot()调用,因为没有此类父调用。如果这样命名,它将起作用。

这是为了避免在模型中使用一个或多个特性时发生冲突,每个特性都有其自己的引导方法。