在我的laravel应用中,一个简单的雄辩调用会为我的表中的新项目生成一个新的ID。 $Article = new Article;
如果我想同时生成自定义代码,该怎么办?
我尝试过:
protected $fillable = [
'RandomReference' => substr(md5(rand()), 0, 7),
...
但出现此错误:Constant expression contains invalid operations
如果我将其设置为受保护字段(而不是可填充字段)也无济于事。
答案 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