我试图为模型属性值提供空白时的另一个值, 目前,这就是我正在模型中使用的东西:
public function getAttribute($property){
if(blank($this->attributes[$property])){
return $this->attributes[$property] = '-';
}else{
return $this->attributes[$property];
}
}
它有效,但是我认为这不是正确的方法。
我正在寻找一种合适的方法。
示例:
让我们说数据库中的值为NULL, 我希望它在显示时显示“-”,但我不想在数据库中保存“-”。 (我也不想为每个值都使用“ get ... Value”变量)
答案 0 :(得分:2)
自PHP 7起,有一个名为Null Coalescing operator的新功能。如果存在而不是NULL
的话,它将返回第一个运算符:
{{ $model->attribute ?? '-' }}
与此相同:
{{ isset($model->attribute) ? $model->attribute : '-' }}
另一种解决方案会有点困难,但可行:
创建一个基础模型,将所有其他模型扩展到该基础模型:
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'];
}
当属性name
和email
为空,NULL或仅包含空格的字符串时,这将自动替换它们。
旁注: 您也可以将功能转移到特征(这可能是一个更优雅的解决方案,但这取决于您)。