相关实体不正确合并(Associated entity not merged correctly)

2019-10-21 08:54发布

我有2名相关的实体是这样的:

class Solicitation {
    <some fields>
    /**
     * @var \User
     *
     * @ORM\ManyToOne(targetEntity="User", fetch="EAGER", inversedBy="solicitation")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_user", referencedColumnName="id_user", nullable=false)
     * })
     * @OrderBy({"nome" = "ASC"})
     */
    private $user;
    <more fields>
}

我不想级联操作。 问题是,当我尝试坚持征集,这样之前合并现有用户:

$em = $this->getDoctrine()->getManager();
if (!(\Doctrine\ORM\UnitOfWork::STATE_MANAGED === $em->getUnitOfWork()->getEntityState($solicitation->getUser()))) {
    $em->merge($solicitation->getUser());
}
$em->persist($solicitation);

......它不会改变用户的UnitOfWork状态,以“托管”。 I`ts还是“分离”,我接受和错误的节约。

Answer 1:

我花了一整天的时间来发现

$em->merge($solicitation->getUser()) 

不改变原有的实体,它返回一个menaged实体。 所以,正确的是:

$solicitation->setUser($em->merge($solicitation->getUser()));

然后坚持邀请。 万一别人做这个问题需要这个。



文章来源: Associated entity not merged correctly