Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2:EntityManager级联在未请求时保持_Php_Symfony_Doctrine - Fatal编程技术网

Php Symfony 2:EntityManager级联在未请求时保持

Php Symfony 2:EntityManager级联在未请求时保持,php,symfony,doctrine,Php,Symfony,Doctrine,我有一个对象(酒店)与另一个对象(城市)的关系是“一家公司” 保存对象“Hotel”时,persistCadade会触发对象“City”上的persist,然后该对象会尝试进行插入 我可能理解,如果请求persist,它希望插入。事实上,我必须对城市对象进行一些更改,但我不需要保存这些更改 我的酒店对象应该只使用正确的city_id更新,而不管city对象上发生了什么,因为我没有提到任何“cascade persist” 你知道是什么导致了这个问题吗 酒店等级: /** * @ORM\Many

我有一个对象(酒店)与另一个对象(城市)的关系是“一家公司”

保存对象“Hotel”时,persistCadade会触发对象“City”上的persist,然后该对象会尝试进行插入

我可能理解,如果请求persist,它希望插入。事实上,我必须对城市对象进行一些更改,但我不需要保存这些更改

我的酒店对象应该只使用正确的city_id更新,而不管city对象上发生了什么,因为我没有提到任何“cascade persist”

你知道是什么导致了这个问题吗

酒店等级:

/**
 * @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实体就可以做到这一点。