请问 Laravel 框架为什么会选择将请求参数的空字符串转换为 null 呢?
protected $middleware = [
.
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class
.
];
class ConvertEmptyStringsToNull extends TransformsRequest
{
protected function transform($key, $value)
{
return is_string($value) && $value === '' ? null : $value;
}
}
现在因为这个中间件,框架会把请求参数空字符串自动转为 null
,导致数据库保存报错。
我搜索了很多关于此点的回答大致解决方案有以下,但都没有回归到问题本质上面来。
- 去掉这条中间件的注册
- 在控制器中转换 $request->column ?: '';
为什么 Laravel 框架会选择将请求参数 空字符串 转换为 null
呢?
是否意味着框架鼓励我们将可选的数据库字段设置为 nullable
?
允许为空的数据字段更推荐设置为 nullable,Laravel 的数据库字段类型定义都是规范的。个人建议使用一个框架就去尽量遵守框架定义好的规范。
例如:
空字段可设置为null,空字符串等。Laravel 默认使用 null
时间字段可设置为时间戳,datetime,int 等。Laravel 默认使用时间戳