在new Model
或Model::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
属性,但它不是我想要的。我希望从数据库模式中获取它。
答案 0 :(得分:0)
您可以覆盖__construct()
函数以合并任何缺少的属性。
所以在你的模特中......
protected $defaults = [
'sex' => 1,
'device' => 'AAA',
'os' => 'BBB',
];
public function __construct($attributes = [])
{
$attributes = array_merge($this->defaults, $attributes);
parent::__construct($attributes);
}