我在从 DTO 更新订单项目时遇到问题。在应用程序中,我有订单编辑页面,该页面发送一个转换为 DTO 的请求:
class OrderData
{
/**
* @var string|null
*/
protected $date;
/**
* @var array|OrderItemData[]
*/
protected $orderItemsData;
(...)
}
订单项目数据:
class OrderItemData
{
/**
* @var int|null
*/
protected $id;
/**
* @var float|null
*/
protected $price;
/**
* @var int|null
*/
protected $quantity;
(...)
}
订单实体具有映射:
class Order
{
/**
* @var Collection|OrderItem[]
*
* @ORMOneToMany(targetEntity="OrderItem", mappedBy="order", cascade={"persist", "remove"})
*/
protected $orderItems;
(...)
}
从OrderItemData
数组更新$order->orderItems
集合的最佳解决方案是什么?更糟糕的是,订单编辑允许对订单项列表进行三种类型的修改:
- 可以更改当前订单项目
- 可以删除当前订单项目
- 可以创建新的订单项目
作为一种解决方法,我曾经从订单中清除所有订单项,然后遍历 OrderItemData 数组并创建新项,但该解决方案是解决方法,现在是时候用它做一些更好的事情了。
我在互联网上找到了很多页面,鼓励使用DTO类,即使作为Symfony Form数据类,但我没有找到更新集合问题的解决方案。有人可以给我任何建议吗?
如果你构建 REST API,你必须创建这样的操作(ant 现在担心嵌套集合(:
POST /order/orderItem to add
PUT /order/orderItem/{id} to update
DELETE /order/orderItem/{id} to delete