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

标签 php laravel laravel-4

我有一个 Laravel 模型,它有多个字段在数据库中默认为 NULL,并且由于遗留原因无法轻易更改。我希望始终将它们作为空字符串返回,例如,当从我的路由返回 JSON 时。是否有一种“标准”方式以某种方式在模型中定义默认值?

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

最佳答案

默认值

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

class MyModel extends Eloquent {
    protected $attributes = array(
        'foo' => 'bar'
    );
}

但是我认为这仍然会被数据库中的 NULL 覆盖。 $attributes 的用例是在创建和插入新记录时。

处理 JSON/数组输出

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

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

带有访问器的自定义属性

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

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

现在您可以通过$model->full_name(或$model->fullName,无论您喜欢哪个)访问它

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

protected $appends = array('full_name');

关于php - 在 MySQL 之外为 Laravel 模型字段提供默认值的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27825303/

相关文章:

PHP floatval、intval、substr 没有正确返回值

php - PDF 的谷歌视觉

php - Laravel 5.1 在 with 函数中选择字段

mysql - 如何将 SQL 查询转换为 Eloquent Laravel

php - 如何优雅地处理 Controller 中缺少的参数?

apache - 重定向 301 htaccess 仅适用于斜线 Laravel

php - 使用碳对象的 Laravel 数据透视表额外日期时间字段格式(不是时间戳)

php - 如果另一列包含所有请求值集,如何从表中选择特定列?

php - 带有动态参数的 Laravel 5 全局作用域

laravel - Eloquent Restore() 函数对软删除无法恢复