为什么每次我尝试在我的迁移中发布一个整数作为数据类型的空输入时,我都会收到此错误:
SQLSTATE [HY000]:常规错误:1366不正确的整数值
我的迁移:
public function up()
{
Schema::table('dossiers', function (Blueprint $table) {
$table->integer('amount_of_cilinders')->nullable();
$table->integer('amount_of_doors')->nullable();
$table->integer('manufacturing_year')->nullable();
$table->integer('manufacturing_month')->nullable();
$table->date('date_first_admission')->nullable();
$table->integer('weight')->nullable();
$table->integer('power')->nullable();
});
}
我的控制器:
public function update(Request $request, Dossier $dossier)
{
$this->validate($request, [
'date_first_admission' => 'date',
]);
$dossier->update($request->all());
return redirect('/dossiers/' . $dossier->id);
}
更新
我决定将数据类型更改为string
,因为我没有在其他地方使用这些列。
E.g。 $table->string('power')->nullable();
答案 0 :(得分:0)
由于MySQL在严格模式下运行,可能会发生这种情况。
在MySQL CLI中运行以下查询,以检查数据库是否处于严格模式:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
如果它包含STRICT_TRANS_TABLES,您可以尝试运行:
SET @@global.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
答案 1 :(得分:0)
Null并不代表空字符串。您可以在迁移中的所有列中添加->default(0)
。
$table->integer('power')->default(0)->nullable();
OR
在模型中使用mutator,在传递值之前进行检查:
public function setPowerAttribute($value){
$this->attributes['power'] = (empty($value) ? 0 : $value);
}
答案 2 :(得分:0)
使用nullable()
时,表示默认设置为NULL。因此,请将其设为默认0
,如下所示:
$table->integer('COLUMNNAME')->default(0);
答案 3 :(得分:0)
我可能完全关闭,但AFAIK空值在数字字段中无效。如果您不输入任何内容,输入返回的值可能是空字符串。这会触发SQL错误,因为您可能
空字符串既不是0,也不是NULL。
也许这篇文章可以帮助你,它在使用验证规则时处理类似的怪异,我想这可能是这种行为的另一种表现。
https://github.com/laravel/framework/issues/11452
阿明。