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

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站