我的表格如下:
交货
- id (auto increment ID)
- supplier_name (string)
- delivery_date (datetime)
- ...
库存变动
- id (auto increment ID)
- entity_type (string)
- entity_id (string) //This can hold a UUID or ID.
- qty (int)
- ...
关系
具有交货:id的交货有很多库存移动,链接到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查询使用的传递ID是整数,但是由于stock_movements entity_id的类型转换,我认为这失败了,因为我需要将其作为字符串。
变通
现在,我可以通过循环调用delete来使其工作。
$delivery->stockMovements()->each(function (StockMovement $sm){
$sm->delete();
});
有什么主意为什么在循环中运行却能在一次调用所有记录上的delete时失败?