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

时间:2015-05-26 13:14:52

标签: php laravel laravel-5

new ModelModel::create()创建对象时,Laravel是否可以从数据库为模型设置默认属性值?

例如,我有一些表clients,其中包含一些列(名称,性别,生日,设备,操作系统等)。我在做

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

并希望$client对象具有所有属性,而不仅仅是名称。 dd($client->toArray());返回

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

但是dd(Client::find(1)会返回

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

是的,我可以在模型中设置protected $attributes属性,但它不是我想要的。我希望从数据库模式中获取它。

1 个答案:

答案 0 :(得分:0)

您可以覆盖__construct()函数以合并任何缺少的属性。

所以在你的模特中......

protected $defaults = [
    'sex' => 1,
    'device' => 'AAA',
    'os' => 'BBB',
];

public function __construct($attributes = [])
{
    $attributes = array_merge($this->defaults, $attributes);

    parent::__construct($attributes);
}