Как установить значение атрибута по умолчанию для модели Laravel / Eloquent?

Если я попробую объявить свойство, вот так:

public $quantity = 9; 

… он не работает, потому что он не считается «атрибутом», а просто свойством класса модели. Не только это, но и я блокирую доступ к фактически реальному и существующему атрибуту «количество».

Что делать, тогда?

Solutions Collecting From Web of "Как установить значение атрибута по умолчанию для модели Laravel / Eloquent?"

Обновление для этого …

@ 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 для получения дополнительной информации: 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); } 

Я предлагаю это как PR, поэтому нам не нужно объявлять этот конструктор на каждой модели, и его можно легко применить, просто объявив массив $defaults в наших моделях …


ОБНОВЛЕНИЕ :

Как указано в сопоставлении, фактический ОТВЕТ достаточно прост :

Просто переопределите свойство $attributes ! Как это:

 protected $attributes = array( 'quantity' => 9, ); 

Вопрос был рассмотрен здесь: https://github.com/laravel/framework/issues/2265