如何从DTO中更新集合内的一对多关系?

问题描述 投票:0回答:1

null * 在应用程序中,我有一个订单编辑页面,它发送了一个转换为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[]
     *
     * @ORM\OneToMany(targetEntity="OrderItem", mappedBy="order", cascade={"persist", "remove"})
     */
    protected $orderItems;

    (...)
}

更新的最佳解决方案是什么?$order->orderItems 荟萃 OrderItemData? 更糟糕的是,订单编辑允许对订单项目列表进行三种修改。

  • 可以修改当前订单项目
  • 当前订单项目可删除
  • 可以创建新的订单项目

作为一个变通方法,我曾经清除订单中的所有订单项目,然后迭代OrderItemData数组并创建新的项目,但是这个方法是变通的,现在是时候做一些更好的事情了,我在互联网上找到了很多网页,鼓励使用DTO类作为Symfony Form数据类,但是我没有找到解决集合更新问题的方法。

我在网上找到很多网页,鼓励使用DTO类,甚至作为Symfony Form数据类,但我没有找到解决更新集合问题的方法。谁能给我一些建议?

symfony collections doctrine one-to-many dto
1个回答
1
投票

如果你建立REST API,你必须创建这样的动作(现在担心嵌套的集合)。

POST /order/orderItem to add
PUT /order/orderItem/{id} to update
DELETE /order/orderItem/{id} to delete
© www.soinside.com 2019 - 2024. All rights reserved.