从聚合内部的 DTO 更新一对多关系的最佳方法是什么?



我在从 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

最新更新