Laravel在Model中编写时创建动态属性

时间:2017-04-05 16:48:53

标签: php laravel eloquent

我想知道在模型中写入时是否可以创建或设置属性。我尝试使用setMutator进行此操作,但是当列表中未提供带有保存参数的属性时,不会创建该值

public function setExampleAttribute($value)
{
    $this->attributes['example'] = 100;
}

所以当我这样做时:

Version::create(['name' => 'mark', 'example' => '50');

记录保存为100。

但是当我这样做时:

Version::create(['name' => 'mark');

记录为空。

有没有办法在两者之间做点什么?那么在编写对象之前,添加一些动态内容?

2 个答案:

答案 0 :(得分:0)

它不起作用,因为create()使用fill()来设置属性值。您可以尝试使用$attributes设置默认值:

protected $attributes = ['example' => 100];

如果要添加动态属性,可以在其中设置属性使用Eloquent creating event

$this->attributes['example'] = $value;

或致电mutator:

$this->setExampleAttribute(null);

答案 1 :(得分:0)

覆盖fill()

考虑将其移至基类或特征,这只是一个示例:

<?php
class Version extends Model {

  public function fill(array $attributes) {
    parent::fill($attributes);

    // Your own implementation here
  }
}

请参阅:Eloquent Model::fill() source for 5.8