如何为Laravel / Eloquent模型设置默认属性值?
如果我尝试声明一个属性,如下所示:
public $quantity = 9;
…它不起作用,因为它不被认为是“属性”,而只是模型类的一个属性。 不仅如此,而且我阻止访问实际存在的“数量”属性。
那我该怎么办?
此更新…
@ j-bruni提交了一个build议,现在Laravel 4.0.x支持使用以下内容:
protected $attributes = array( 'subject' => 'A Post' );
当你构build时,它会自动设置你的属性subject
A Post
。 你不需要使用他在他的答案中提到的自定义构造函数。
但是,如果你最终使用像他一样的构造函数(为了使用Carbon::now()
我需要这样做),注意$this->setRawAttributes()
会覆盖你使用$attributes
上面的数组。 例如:
protected $attributes = array( 'subject' => 'A Post' ); public function __construct(array $attributes = array()) { $this->setRawAttributes(array( 'end_date' => Carbon::now()->addDays(10) ), true); parent::__construct($attributes); } // Values after calling `new ModelName` $model->subject; // null $model->end_date; // Carbon date object // To fix, be sure to `array_merge` previous values public function __construct(array $attributes = array()) { $this->setRawAttributes(array_merge($this->attributes, array( 'end_date' => Carbon::now()->addDays(10) )), true); parent::__construct($attributes); }
有关更多信息,请参阅Github主题: https : //github.com/laravel/framework/issues/2265
这就是我现在正在做的事情:
protected $defaults = array( 'quantity' => 9, ); public function __construct(array $attributes = array()) { $this->setRawAttributes($this->defaults, true); parent::__construct($attributes); }
我会build议这是一个PR,所以我们不需要在每个模型上声明这个构造函数,并且可以通过简单地在我们的模型中声明$defaults
数组来轻松应用…
更新 :
正如cmfolio所指出的那样, 实际的ANSWER很简单 :
只要覆盖$attributes
! 喜欢这个:
protected $attributes = array( 'quantity' => 9, );
这个问题在这里讨论: https : //github.com/laravel/framework/issues/2265