我有 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);
。它不会将用户工作单位状态更改为"托管"。我仍然"分离",我在保存时收到和错误。
我花了一整天才发现
$em->merge($solicitation->getUser())
不会更改原始实体,它会返回一个受威胁的实体。所以正确的是:
$solicitation->setUser($em->merge($solicitation->getUser()));
然后坚持请求。提出这个问题以防其他人需要这个。