Php laravel orm:在5.4版本中,不将空值转换为列类型的列默认值

Php laravel orm:在5.4版本中,不将空值转换为列类型的列默认值,php,mysql,laravel,laravel-5.4,Php,Mysql,Laravel,Laravel 5.4,我以前使用过Laravel5.2,现在我升级到了5.4 在将对象发送到数据库之前,我通常使用我的验证对其进行验证 $validation_rules = ['title'=>'required' , 'number'=>'present|int']; // do validation $obj = new Object(); foreach($validation_rules as $k=>$v ) $obj->$k = $request->input($k)

我以前使用过Laravel5.2,现在我升级到了5.4 在将对象发送到数据库之前,我通常使用我的验证对其进行验证

$validation_rules  = ['title'=>'required' , 'number'=>'present|int'];
// do validation 

$obj = new Object();
foreach($validation_rules as $k=>$v )
$obj->$k = $request->input($k);
现在,如果用户不发送
number
参数,则我的对象的nnumer属性中的参数将为null或false。。。在旧版本中,它会自动更改为该列的默认值。。。例如,如果插入此对象时,
number
列类型为
int
,则
number
列将为
0

但是现在这并没有发生,相反,我得到了这个错误

 Integrity constraint violation: 1048 Column 'number' cannot be null
顺便说一句,严格模式已关闭


请注意,我知道所有关于可空字段的内容,我不想让这些字段可空,这就是重点。。。当字段不可为空时,它将自动将空值转换为默认列类型值

确保列“编号”可为空。如果使用Laravel迁移创建表,则需要将其添加为
$table->integer('number')->nullable()

确保列“number”可为空。如果使用Laravel迁移创建表,则需要将其添加为
$table->integer('number')->nullable()

在Laravel 5.4中,默认值(0)
的概念不同于Laravel 5.2。在5.4中,默认值仅在您不通过任何内容时有效,因此当您通过任何内容时

$obj->$k = $request->input($k);
如果
$request->input($k)
null
,则可能是将
null
插入到不可为null的列中,从而导致错误

因此,您似乎必须使DB中的列为空,并在控制器中进行检查:

$obj->$k = $request->input($k) ? $request->input($k) : 0;

在Laravel5.4中,
->default(0)
的概念不同于Laravel5.2。在5.4中,默认值仅在您不通过任何内容时有效,因此当您通过任何内容时

$obj->$k = $request->input($k);
如果
$request->input($k)
null
,则可能是将
null
插入到不可为null的列中,从而导致错误

因此,您似乎必须使DB中的列为空,并在控制器中进行检查:

$obj->$k = $request->input($k) ? $request->input($k) : 0;

在迁移过程中,是否检查该字段是否包含nullable?像
$table->integer('number')->nullable()?在迁移过程中,是否检查字段是否包含可为null的内容?像
$table->integer('number')->nullable()?thanx,我希望不是这样(至少有一个选项可以打开/关闭此功能)。。。我的意思是为什么它看起来如此不必要Thanx,我希望不是这样(至少有一个选项可以打开/关闭它)。。。我的意思是为什么它看起来如此不必要