Laravel Eloquent自动将空字符串解析为null报错

使用laravel eloquent模型,进行数据的添加、编辑的时候,发现有些空值("")被转为了null,而数据库中,字段的设置是:not null default '' 这样就遇到了问题了。数据库中是not null,而laravel却自动将在表单中没有录入的空值自动转化为null,导致数据插入失败,数据库报错:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'descr' cannot be null 
(SQL: update `arc_cate` set `descr` = , `updated_at` = 2018-12-29 13:35:59 where `id` = 13)
解决方案

理论上来说,要针对所有的输入,都要有个验证和判断,在遇到表单的输入空值的时候,需要为其设置一个默认的值。这种方案,个人认为是比较合理的,也是比较符合规范的,能保证对所有的输入都有个控制的。

另一种访问,是在laravel框架做改动了,在网上查找到说:laravel 全局中间件下ConvertEmptyStringsToNull这个中间件,默认把空字符串转换为null。所以想着能控制这里,不要讲空值转null,就可以了。但是既然laravel官方将空值转为了null,就一定有其道理(虽然我不知)。

所以个人还是比较推崇第一种解决方案的。

关闭laravel空值转null的方案

改动文件:/app/Http/Kernel.php

将公共的中间件ConvertEmptyStringsToNull注释掉

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
#	\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
];