如何为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