dsa4d4789789 2015-05-26 13:14
浏览 146

从数据库模式设置默认属性值

Is it possible for Laravel to set default attribute values for model from database, when creating object by new Model or Model::create()?

For example, I have table clients with some columns (name, sex, birthday, device, os, etc). I'm doing

$client = new Client::create(['name' => 'John Doe']);

and want $client object has all attributes, not only name. dd($client->toArray()); returns

array:1 [▼
  "name" => "John Doe",
  "id" => 1
]

But dd(Client::find(1) returns

array:11 [▼
  "id" => 1
  "name" => "John Doe"
  "birthday" => null
  "sex" => 1
  "device" => ""
  "os" => ""
]

Yes, i could set protected $attributes property in model, but it is not what i'm looking for. I want this to be fetched from database schema.

  • 写回答

1条回答 默认 最新

  • duande1986 2015-05-26 13:53
    关注

    You could override the __construct() function to merge in any missing attributes.

    So in your model...

    protected $defaults = [
        'sex' => 1,
        'device' => 'AAA',
        'os' => 'BBB',
    ];
    
    public function __construct($attributes = [])
    {
        $attributes = array_merge($this->defaults, $attributes);
    
        parent::__construct($attributes);
    }
    
    评论

报告相同问题?