Я получаю эту ошибку:
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();
});






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