SQLSTATE[22007]: 无效的日期时间格式

SQLSTATE[22007]: Invalid datetime forma

我尝试保存它从我的视图中带给我的一些数据,这是一个 table,但我不知道为什么它会在插入时抛出错误。 result of insert

这是我的观点: table of view

这是我的控制器:

    $checked_array = $_POST['id_version'];


    foreach ($request['id_version'] as $key => $value) {
        if (in_array($request['id_version'][$key], $checked_array)) 
        {

            $soft_instal = new Software_instalacion;
            $soft_instal->id_instalacion             = $instalaciones->id;
            $soft_instal->id_historial               = $historial->id;
            $soft_instal->id_usuario                 = $request->id_usuario;
            $soft_instal->id_version                 = $_POST['id_version'][$key];
            $soft_instal->obs_software               = $_POST['obs_software'][$key];
            $soft_instal->id_tipo_venta              = $_POST['id_tipo_venta'][$key];
            $soft_instal->save();
        }
    }

id_tipo_venta 似乎是一个空字符串,显然无效。

您可以尝试调试您得到的内容:

var_dump($_POST['id_tipo_venta'][$key]);
die;

您的数据库字段需要接收一个整数。因此,使用intval()函数可以解决你的问题。

确实,我认为您的代码 return 是一个字母数字字符串。

因此,如果没有版本 returned(未设置,字符串或简单为 null),下面的代码将 return 在所有情况下为 0:

$soft_instal->id_tipo_venta = intval($_POST['id_tipo_venta'][$key]);

另一方面,intval() 将始终转换为 int,因此将转换小数,例如:

intval("1.1") // returns 1
intval("v1.1") // returns 0

如果这不是所需的行为,也许您应该考虑更改数据库类型。

编辑: 当然,您也可以将值设置为 null ,如果您更喜欢 到 0。您必须在数据库中允许可以为 null 的值。

id_tipo_venta 不能为空,尝试使用一些数字或将数据库中的类型列更改为 varchar