为MySQL之外的Laravel模型字段提供默认值的正确方法是什么?

Run*_*ble 4 php laravel laravel-4

我有一个Laravel模型,其中包含各种字段,在数据库中默认为NULL,并且由于遗留原因而无法轻松更改.我想总是将这些作为空字符串返回,例如,当从我的路线返回JSON时.是否有某种"标准"方式以某种方式定义模型中的默认值?

另一种情况可能是某个字段在返回之前总是需要对其进行一些处理,这是否也可以以类似的方式定义?谢谢.

luk*_*ter 6

默认值

您可以使用$attributes属性指定默认值:

class MyModel extends Eloquent {
    protected $attributes = array(
        'foo' => 'bar'
    );
}
Run Code Online (Sandbox Code Playgroud)

但是我认为这仍然会被NULLdb 覆盖.用例$attributes是在创建和插入新记录时.

操纵JSON /数组输出

要在将模型转换为JSON /更改为数组之前更改模型,可以toArray()在模型中覆盖:

public function toArray(){
    $array = parent::toArray();
    foreach($array as &$value){
        if($value == null){
            $value = '';
        }
    }
    return $array;
}
Run Code Online (Sandbox Code Playgroud)

带访问器的自定义属性

如果您有某些字段需要特殊处理(例如格式化日期,连接两个属性),您可以使用访问者:

public function getFullNameAttribute(){
    return $this->attributes['firstname'].' '.$this->attributes['lastname'];
}
Run Code Online (Sandbox Code Playgroud)

现在你可以通过$model->full_name(或$model->fullName任何你喜欢的)访问它

最后,要将其添加到JSON /数组输出,请使用 $appends

protected $appends = array('full_name');
Run Code Online (Sandbox Code Playgroud)