雄辩的删除-SQLSTATE [22007]:无效的日期时间格式:1292截断了错误的DOUBLE值:

时间:2018-12-08 15:03:25

标签: php mysql laravel eloquent

我收到此错误:

SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect DOUBLE value: '808498e7-a393-42f1-ab23-6ee89eb7040a' 

尝试通过关系删除记录时,请使用:

$delivery->stockMovements()->delete();

原始查询显示为:

delete from `stock_movements` where `stock_movements`.`entity_id` = 10000005 and `stock_movements`.`entity_id` is not null and `stock_movements`.`company_id` = 8b11050c-612c-4922-8b34-d04d579e02a9

我已经进行了搜索,但是找不到与此特定的任何东西,除了可能与强制转换错误有关。也许与UUID有关?

迁移如下:

    Schema::create('deliveries', function (Blueprint $table) {
        $table->increments('id');
        $table->uuid('company_id');
        $table->string('delivery_type');
        $table->string('supplier_name');
        $table->string('supplier_ref')->nullable();
        $table->string('merchant_ref')->nullable();
        $table->string('carrier_name')->nullable();
        $table->string('status');
        $table->date('expected_delivery');
        $table->dateTime('completed_at')->nullable();
        $table->timestamps();
    });


    Schema::create('stock_movements', function (Blueprint $table) {
        $table->increments('id');
        $table->uuid('company_id');
        $table->uuid('product_id');
        $table->string('entity_type'); //can be order / delivery
        $table->string('entity_id'); //can be UUID / String / Integer
        $table->string('location_id')->nullable(); // can be warehouse_location / shipment_package / delivery_container
        $table->string('action')->default('');
        $table->integer('qty')->default(0);
        $table->timestamps();
    });

4 个答案:

答案 0 :(得分:1)

我认为您缺少引号,因此您的UUID可以视为字符串类型:

delete from `stock_movements` where `stock_movements`.`entity_id` = 10000005 and `stock_movements`.`entity_id` is not null and `stock_movements`.`company_id` = '8b11050c-612c-4922-8b34-d04d579e02a9'

company_id的值被视为数字/双精度数(无论如何都不是字符串),因此在将其放入查询之前,您可能忘记了将其转换为字符串。

答案 1 :(得分:1)

我知道它已有几个月的历史了,但是由于没有公认的解决方案,因此我将其发布。
我有完全相同的错误消息,但上下文略有不同:

Table::whereIn('fk_id', $arrayOfFkIds)
                ->delete();

该数组包含的值可以是字符串(例如'ABC1234',例如company_id)或整数。

解决方法是在构建此数组时,将所有内容都转换为字符串:

$arrayOfFkIds[] = (string)$parsedArray['stuff_id'];

再也不会出现SQL错误,一切都会顺利进行。

答案 2 :(得分:0)

当我尝试通过 Eloquent 范围删除模型时,我遇到了完全相同的问题。

这会导致与上述完全相同的错误:

return $query->whereNotIn('remote_status', $this->typeDeletedStatuses)

类型铸造的解决方案对我的口味来说太脆了,不够明显。 因此,经过反复试验后,我将 intstring 状态分开,并像这样重建查询:

return $query->whereNotIn('remote_status', $this->typeDeletedStatuses)
            ->orWhereIntegerNotInRaw('remote_status', $this->typeIntDeletedStatuses);

现在示波器按预期工作。

答案 3 :(得分:0)

如果您要比较的变量没有值,也会出现此错误消息。

例如:$id = ''User::where('id', $id)

在我的代码中搜索相同错误的解决方案时,我遇到了这个问题,我注意到正在处理的变量没有值并且错误已解决并且代码在变量开始获取适当的值时工作正常。