Php Symfony 2:EntityManager级联在未请求时保持
我有一个对象(酒店)与另一个对象(城市)的关系是“一家公司” 保存对象“Hotel”时,persistCadade会触发对象“City”上的persist,然后该对象会尝试进行插入 我可能理解,如果请求persist,它希望插入。事实上,我必须对城市对象进行一些更改,但我不需要保存这些更改 我的酒店对象应该只使用正确的city_id更新,而不管city对象上发生了什么,因为我没有提到任何“cascade persist” 你知道是什么导致了这个问题吗 酒店等级:Php Symfony 2:EntityManager级联在未请求时保持,php,symfony,doctrine,Php,Symfony,Doctrine,我有一个对象(酒店)与另一个对象(城市)的关系是“一家公司” 保存对象“Hotel”时,persistCadade会触发对象“City”上的persist,然后该对象会尝试进行插入 我可能理解,如果请求persist,它希望插入。事实上,我必须对城市对象进行一些更改,但我不需要保存这些更改 我的酒店对象应该只使用正确的city_id更新,而不管city对象上发生了什么,因为我没有提到任何“cascade persist” 你知道是什么导致了这个问题吗 酒店等级: /** * @ORM\Many
/**
* @ORM\ManyToOne(targetEntity="XYZ\Entity\City")
* @ORM\JoinColumn(name="city_id", referencedColumnName="id")
*/
protected $city;
谢谢,您要传递给
酒店的城市
对象必须持久化,才能拥有主键(将用作外键)
如果没有持久化的city
对象,就不可能获取city\u id
。已经持久化的实体将被更新,而不管在原则2中调用persist()
。请参阅:您看到了一种不持久化此对象的方法吗?当然,但此城市对象已持久化。基本上,在我的酒店表单中,我有一个可用城市的下拉列表(已持久化),当选择其中一个城市时,我只想将ID保存在我的酒店中,城市上不应出现任何内容。它可能来自您的城市
实体的持久化状态。对于条令的工作单元,它可能不处于“持续”状态。尝试执行$entityManager->getUnitOfWork()->getEntityState($city)代码>。当你实例化你的City
类而不通过条令时,它就会发生。返回的状态是“State\u MANAGED”ha!那就奇怪了。它仍然尝试插入此城市对象?您确定没有在其他地方创建第二个City
实例吗?您始终可以使用spl\u object\u hash($entity)
来验证这一点,并比较结果以检查插入是否由另一个(未管理)引起实体。从文档:同步涉及将对持久实体及其关系的任何更新写入数据库。
-据我所知,您更改了关系中的某些内容。如果您flush()
您的UnitOfWork,这将被持久化。也许从UnitOfWork/EntityManager中删除City实体就可以做到这一点。