如何为Laravel / Eloquent模型设置默认属性值?
如果我尝试声明一个属性,如下所示:
public $quantity = 9;
...它不起作用,因为它不被视为“属性”,而只是模型类的属性。不仅如此,我还阻止了对实际真实和存在的“数量”属性的访问。
那么,我该怎么办呢?
如果我尝试声明一个属性,如下所示:
public $quantity = 9;
...它不起作用,因为它不被视为“属性”,而只是模型类的属性。不仅如此,我还阻止了对实际真实和存在的“数量”属性的访问。
那么,我该怎么办呢?
对此的更新...
@j-bruni提交了一份提案,Laravel 4.0.x现在支持使用以下方法:
protected $attributes = array(
'subject' => 'A Post'
);
这将在构造时自动设置您的属性。您不需要使用他在答案中提到的自定义构造函数。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 线程。
这就是我现在正在做的事情:
protected $defaults = array(
'quantity' => 9,
);
public function __construct(array $attributes = array())
{
$this->setRawAttributes($this->defaults, true);
parent::__construct($attributes);
}
我将建议将其作为PR,这样我们就不需要在每个模型上声明此构造函数,并且可以通过简单地在我们的模型中声明数组来轻松应用...$defaults
更新:
正如cmfolio所指出的,实际的答案非常简单:
只需覆盖属性!喜欢这个:$attributes
protected $attributes = array(
'quantity' => 9,
);