具有单向OneToMany的学说合并实体不清除数据库条目

时间:2018-11-08 16:01:37

标签: php doctrine-orm symfony4

首先,我将Doctrine v2.6.2与Symfony v4.1.7结合使用。

我有一个实体Product,该实体(除其他外)与另一个实体AlternativeDuration具有单向一对多关系。根据Doctrine的文档,我的产品类中的映射如下所示:

/**
 * @ORM\ManyToMany(
 *     targetEntity="AlternativeDuration",
 *     cascade={"persist", "merge", "remove"},
 *     orphanRemoval=true
 *   )
 * @ORM\JoinTable(name="ProductAlternativeDurations",
 *   joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id", onDelete="CASCADE", nullable=false)},
 *   inverseJoinColumns={@ORM\JoinColumn(name="alternative_duration_id", referencedColumnName="id", unique=true, onDelete="CASCADE", nullable=false)}
 * )
 */
 protected $alternativeDurations;

我的应用程序最近开始使用React,这意味着我现在提交我的产品的JSON表示形式(以及一系列可选的持续时间),我需要在后端将其反序列化为Product实体。我为此使用了默认配置的JMS序列化程序。

现在,在编辑现有产品时出现了我所遇到的问题,该产品已经具有我要删除的替代期限。提交的JSON如下所示:

{
    "id": 1,                      # the ID of the existing product here
    "alternativeDurations": []    # empty array because the entry is removed
}

在后端,我成功地反序列化了JSON字符串:

$serializedProduct = $this->serializer->deserialize($jsonString, Product::class, 'json');

我在这里验证了$serializedProduct没有替代的持续时间。然后我进行合并+刷新。我希望合并能够获取现有产品并用$serializedProduct进行补充。

$em->merge($serializedProduct);    # $em being the EntityManager.
$em->flush();

现在,我希望AlternativeDuration条目以及ProductAlternativeDurations连接表条目被删除。但是,结果是ProductAlternativeDurations中的条目已删除,但AlternativeDuration仍然存在。

我现在很茫然,任何人都可以提出一些有关为什么不删除AlternativeDuration条目的指示?

编辑19-11-2018:

这似乎是教义中的一个已知错误:#2542

merge也将在Doctrine3中被删除,因此我可能一般需要重新考虑这种方法。

0 个答案:

没有答案