关联实体未正确合并

时间:2014-12-05 17:41:09

标签: php symfony doctrine

我有两个相关联的实体:

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);

...它不会将User UnitOfWork状态更改为“MANAGED”。我仍然“脱离”,我收到并保存错误。

1 个答案:

答案 0 :(得分:2)

我花了一整天才发现

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

不会更改原始实体,会返回一个被管理的实体。所以正确的是:

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

然后继续征求意见。提出这个问题以防其他人需要这个。