У меня есть следующие таблицы:
поставки
- id (auto increment ID)
- supplier_name (string)
- delivery_date (datetime)
- ...
stock_movements
- id (auto increment ID)
- entity_type (string)
- entity_id (string) //This can hold a UUID or ID.
- qty (int)
- ...
Отношения
Поставка hasMany движения запасов с поставками: идентификатор связан с stock_movements: entity_id
Проблема
Вызов:
$delivery->stockMovements()->delete();
Ошибки:
SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect DOUBLE value: '808498e7-a393-42f1-ab23-6ee89eb7040a' (SQL: delete from `stock_movements` where `stock_movements`.`entity_id` = 10000005 and `stock_movements`.`entity_id` is not null)
Необработанный запрос SQL использует идентификатор доставки как в целочисленном, но я думаю, что это не удается, так как мне нужно, чтобы это была строка, из-затип приведения stock_movements entity_id.
Обход
Сейчас я могу заставить это работать, вызывая удаление в цикле.
$delivery->stockMovements()->each(function (StockMovement $sm){
$sm->delete();
});
Есть какие-нибудь идеи, почему делать это в цикле нормально, в то время как вызов delete для всех записей не удался?