Laravel无法将空白值插入可空数据库字段



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

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

一般错误:1366 不正确的十进制值:"列 "service_3_total">

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

有什么想法吗?

在您的评论中,您指出要插入的变量的值为:

"service_3_total" => ""

空字符串 !== 空

您正在传递一个空白字符串而不是 null,因此 MySQL 在尝试将该"解析为数字时出错。

这样的东西可以在你的代码中工作。只需在插入之前添加此内容即可。(根据您的用例使其更优雅,这只是为了让它正常工作而没有错误(

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

当您现在尝试此操作时,MySQL将正确识别该值为null并将其输入到数据库中,空白字符串将不起作用。

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管理数据

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

最新更新