How to set a default attribute value for a Laravel / Eloquent model?

前端 未结 3 1594
醉梦人生
醉梦人生 2020-11-30 07:22

If I try declaring a property, like this:

public $quantity = 9;

...it doesn\'t work, because it is not considered an \"attribute\", but mer

3条回答
  •  醉梦人生
    2020-11-30 08:01

    An update to this...

    @j-bruni submitted a proposal and Laravel 4.0.x is now supporting using the following:

    protected $attributes = array(
      'subject' => 'A Post'
    );
    

    Which will automatically set your attribute subject to A Post when you construct. You do not need to use the custom constructor he has mentioned in his answer.

    However, if you do end up using the constructor like he has (which I needed to do in order to use Carbon::now()) be careful that $this->setRawAttributes() will override whatever you have set using the $attributes array above. For example:

    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);
    }
    

    See the Github thread for more info.

提交回复
热议问题