Обновление этого ...
@ 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
J.Bruni, ум обмена PR URL? поэтому мы можем отслеживать это также :) –
@TianLoon, я обновил ответ. Оригинальный PR находится здесь: https://github.com/laravel/framework/pull/2264 - я сам его закрыл, узнав больше о '$ attributes' и признав, что это не обязательно. См. Ответ @cmfolio для получения подробной информации (он использует мое предлагаемое решение, потому что ему нужно создать экземпляр объекта для одного значения по умолчанию). –
@ J.Bruni привет, я попробовал переопределить атрибуты $, такие как ваш ответ. , когда 'dd()' значение атрибутов по умолчанию отображается правильно. , но атрибут mutators не работает для этого способа. :/ Я делаю это в laravel 5 – antoniputra