我有一个与自身有OneToMany关系的实体(注意它使用单表继承)。
/**
* @ORM\Table()
* @ORM\Entity()
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discr", type="string", length=30)
**/
abstract class PlatformPost
{
// [...]
/**
* @var PlatformPost
*
* @ORM\ManyToOne(targetEntity="PlatformPost", inversedBy="comments")
*/
private $parent;
/**
* @var PlatformPost[]|Collection
*
* @ORM\OneToMany(targetEntity="PlatformPost", mappedBy="parent", orphanRemoval=true, cascade={"ALL"})
* @Assert\Valid()
*/
private $comments;
// [...]
}
我从api创建这个实体然后坚持它。如果它已经存在,我使用$em->merge($post)
进行更新。
这只是一种作品。我从该方法获得的实体与我想要的完全相同,但是doctrine不会更新注释的外键。如果我再次查询帖子,则注释数组仍包含应删除的旧实体。
快速解决方案是在合并之前删除所有评论,但我想要一个更好的解决方案。