我有一个现有的数据模型,该模型具有唯一的索引字符串字段,该字段默认为空字符串。
我在模型中添加了$ attributes属性,以在创建新对象时将其默认为空字符串。很好。
但是,当更新对象并且该字段保持为空时,它将失败,因为该字段返回为空并且DB字段不可为空。我不确定使该字段为nullable()会带来什么影响。太多的代码无法挖掘,因此我无法更改。
我想我可以观察一个事件,并在那里将值从null更改为空字符串,但是我宁愿在Nova中解决这个问题。
无论如何告诉Nova,应该将一个空字段另存为空字符串?
答案 0 :(得分:0)
简短版本:否。
长版: 无法在Nova中设置。一个空字符串将在HTTP请求中作为null传递。这种行为是Laravel核心的一部分。确保它不会作为Nova的空字符串传递的唯一方法是对其进行表单验证,并将其作为必填字段。
如果您不介意在Laravel应用程序级别上更改代码,则可以通过删除应用程序内核中的ConvertEmptyStringsToNull
中间件来禁用此行为。
/app/Http/Kernel.php
protected $middleware = [
...
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, // remove this line
];
但是,如果DB字段不可为空,那么该字段必须有一个正确的值吗?我建议将访问器放在模型上以检查空值:
public function setMyFieldAttribute($val)
{
$this->attributes['my_field'] = $val ?? '';
}
或者,如果您想确定它始终具有值,请为保存事件添加一个观察者(如前所述),并在实际保存数据之前确保该字段具有值。