Php laravel orm:在5.4版本中,不将空值转换为列类型的列默认值
我以前使用过Laravel5.2,现在我升级到了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)
$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,我希望不是这样(至少有一个选项可以打开/关闭它)。。。我的意思是为什么它看起来如此不必要