2017-04-14 94 views
1

我在我的数据库表中有一个名为service_3_total的字段,其类型为decimal(10,2)。我已经在我的迁移中将此设置为nullable()字段,所以在我的数据库中为空=是和默认= NULL。Laravel无法将空值插入可空数据库字段

如果我提交我的表单时将该字段留空我得到以下错误:

General error: 1366 Incorrect decimal value: '' for column 'service_3_total'

我不知道,因为我已经允许这一领域是数据库中的空为什么我得到这个。我认为这与它是一种十进制数据类型有关。

任何想法?

+1

你可能会传递错误的数据类型的成列。谨慎分享一些代码? – TurtleTread

+0

没有数据,该字段为空,因为我没有在该字段中插入值。当我检查在这里提交的表单数据是我得到的那个字段:'“service_3_total”=>“”' – user3574492

回答

3

在你的评论指出变量插入值是:

"service_3_total" => "" 

空字符串== NULL

你传递一个空字符串,而不是空,所以MySQL是示数出试图把这个“”分解成一个数字。

像这样的东西可以在你的代码中工作。只需在插入前添加它即可。 (请根据您的用例,它更优雅,这只是为了不误工作)

if (!$data['service_3_total']) { 
    $data['service_3_total'] = null; 
} 

当你现在试试这个,MySQL将正确识别了一个空值,并输入它作为这样的DB,空白字符串不起作用。

+0

Ofcourse,good old''“vs null' – user3574492

-1

“service_3_total”=>“”。如果将列值设置为空字符串并传递整个数组以执行,则会出现错误,因为空字符串是字符串类型,不等于NULL。您应该取消该数组中的此键以使SQL执行默认设置。

0
class YourModel extends Model 
{ 
    protected static function boot() 
    { 
     static::creating(function ($model) { 
      $model->service_3_total = empty($model->service_3_total) ? null : $model->service_3_total ; 
     }); 

     static::updating(function ($model) { 
      $model->service_3_total = empty($model->service_3_total) ? null : $model->service_3_total ; 
     }); 
    } 

} 

您可以使用函数来创建/更新之前blank值转换为null模型内,以防止周围控制器搞乱,让我们model管理数据