laravel模型中的自动填充字段?

时间:2018-08-27 01:05:44

标签: php laravel eloquent

在我的laravel应用中,一个简单的雄辩调用会为我的表中的新项目生成一个新的ID。 $Article = new Article;

如果我想同时生成自定义代码,该怎么办?

我尝试过:

protected $fillable = [
'RandomReference' => substr(md5(rand()), 0, 7),
...

但出现此错误:Constant expression contains invalid operations

如果我将其设置为受保护字段(而不是可填充字段)也无济于事。

2 个答案:

答案 0 :(得分:3)

fillable属性需要一个属性名称列表。您将无法传递任何动态调用来为这些属性生成数据。

您可以使用boot方法在创建事件时自动生成属性。

protected $fillable = [
  'RandomReference', /* ... */
];

public static function boot()
{
    parent::boot();

    static::creating(function ($model) {

        $model->RandomReference = substr(md5(rand()), 0, 7);

    });
}

有关更多示例,请参见this reference

答案 1 :(得分:0)

这可以通过 Mutator 完成,我相信这是最Laravelish的方法。

将以下内容添加到您的口才模型中:

public function setRandomReferenceAttribute()
{
    $this->attributes['RandomReference'] = substr(md5(rand()), 0, 7);
}

请在官方文档中查找更多详细信息:

https://laravel.com/docs/5.6/eloquent-mutators#defining-a-mutator