Eloquent Delete - SQLSTATE [22007]: недопустимый формат даты и времени: 1292 Усеченное неправильное значение DOUBLE:

Я получаю эту ошибку:

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();
    });
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
10 097
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я думаю, вам не хватает кавычек, поэтому ваш 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 рассматривается как число / двойное значение (в любом случае не как строка), поэтому вы могли забыть преобразовать его в строку, прежде чем вставлять в запрос.

Ответ принят как подходящий

Я знаю, что ему несколько месяцев назад, но так как принятого решения нет, я публикую свое. У меня было такое же сообщение об ошибке, но в немного другом контексте:

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

Массив содержал значения, которые были либо строками (например, «ABC1234», например, your company_id), либо целыми числами.

Обходной путь заключался в том, что когда я строил этот массив, я преобразовывал все в строку:

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

Тогда больше никаких ошибок SQL, все работает без сбоев.

Я только что столкнулся с той же проблемой при попытке удалить модели через область Eloquent.

Это приводит к той же ошибке, что и выше:

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

На мой взгляд, решение типа литья было слишком хрупким, недостаточно очевидным. Итак, после некоторых проб и ошибок я разделил статусы int и string и перестроил запрос следующим образом:

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

Теперь прицел работает как положено.

Это сообщение об ошибке также может появиться, если сравниваемая переменная не имеет значения.

Например: $id = '' и User::where('id', $id).

Я столкнулся с этим вопросом при поиске решения той же ошибки в моем коде, я заметил, что переменная, над которой я работаю, не имеет значения, и ошибка была устранена, и код работает нормально, когда переменная начинает получать соответствующие значения.

Другие вопросы по теме