如何使空值具有默认值?

时间:2019-07-01 22:04:19

标签: laravel

我试图为模型属性值提供空白时的另一个值, 目前,这就是我正在模型中使用的东西:

public function getAttribute($property){
    if(blank($this->attributes[$property])){
        return $this->attributes[$property] = '-';
    }else{
        return $this->attributes[$property];
    }
}

它有效,但是我认为这不是正确的方法。

我正在寻找一种合适的方法。

示例:

让我们说数据库中的值为NULL, 我希望它在显示时显示“-”,但我不想在数据库中保存“-”。 (我也不想为每个值都使用“ get ... Value”变量)

1 个答案:

答案 0 :(得分:2)

解决方案1 ​​

自PHP 7起,有一个名为Null Coalescing operator的新功能。如果存在而不是NULL的话,它将返回第一个运算符:

{{ $model->attribute ?? '-' }}

与此相同:

{{ isset($model->attribute) ? $model->attribute : '-' }}

解决方案2

另一种解决方案会有点困难,但可行:

创建一个基础模型,将所有其他模型扩展到该基础模型:

class BaseModel extends Model {

    protected $emptyAttributes = [];

    protected function getAttribute($property)
    {
        if (in_array($property, $this->emptyAttributes) && blank($this->attributes[$property])) {
            return '-';
        }
        else {
            return $this->attributes[$property];
        }
    }
}

现在将您想要的所有模型扩展到这个新类,并创建一个“替换属性”数组:

class User extends BaseModel {

    protected $emptyAttributes = ['name', 'email'];

}

当属性nameemail为空,NULL或仅包含空格的字符串时,这将自动替换它们。

旁注: 您也可以将功能转移到特征(这可能是一个更优雅的解决方案,但这取决于您)。