Laravel无法将空值插入可空的DB字段

时间:2017-04-14 19:12:35

标签: php mysql laravel decimal

我的数据库表中有一个名为service_3_total的字段,其类型为decimal(10,2)。我在迁移中将其设置为nullable()字段,因此在我的数据库中Null = Yes和Default = NULL。

如果我在提交表单时将此字段留空,则会收到以下错误:

  

常规错误:1366十进制值不正确:''列   'service_3_total'

我不知道为什么我得到这个,因为我允许这个字段在数据库中为空。我认为它与小数据类型的事实有关。

任何想法?

3 个答案:

答案 0 :(得分:5)

在评论中,您声明要插入的变量的值为:

"service_3_total" => ""

空字符串!== null

你传递一个空字符串而不是null,所以MySQL错误地试图解析那个""分数。

这样的东西可以在您的代码中使用。只需在插入之前添加它。 (根据您的使用情况,使其更优雅,这只是为了让它无误地工作)

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

当你现在尝试这个时,MySQL会正确地将值识别为null并在数据库中输入它,空白字符串不会工作。

答案 1 :(得分: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管理数据

答案 2 :(得分:-1)

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