使用Doctrine,我有2个班级 他们之间的关系是OneToMany / ManyToOne:
>> ZipGroup Class
/**
* @ORM\OneToMany(targetEntity="License", mappedBy="zipGroup")
*/
protected $licenses;
>> License Class
/**
* @ORM\ManyToOne(targetEntity="ZipGroup", inversedBy="licenses")
* @ORM\JoinColumn(name="zipGroup_id", referencedColumnName="id", onDelete="SET NULL")
*/
protected $zipGroup;
在我的单元测试期间,我验证当我删除一个zipgroup时,它在许可证中正确设置为null。 问题是,当我从存储库加载许可证时,似乎我得到一个虚拟空对象(没有ID)而不是NULL。也许这是一个缓存版本?
...
$this->_em->remove($zipGroup);
$this->_em->flush();
$zipGroup = $this->_em->getRepository("BarcodePhpBundle:ZipGroup")->findOneByName("ZipGroupName");
$this->assertEquals(NULL, $zipGroup);
// License is NOT removed
$license = $this->_em->getRepository("BarcodePhpBundle:License")->findOneByPrice(25);
$this->assertEquals(25, $license->getPrice());
// BUG HERE, that value is not null, but I get an dummy object
$this->assertEquals(NULL, $license->getZipGroup());
查看数据库,该行为NULL,但Doctrine不会说NULL ...
有什么想法吗?
看起来像这个问题: How to handle related null-objects correctly in symfony 1.4
答案 0 :(得分:0)
删除后,实体经理未被清除。为了清除身份映射,必须调用以下代码:
$这 - > _em->清除();
来自:https://groups.google.com/forum/#!msg/doctrine-user/73c6h4JgLRY/sQvBjSjzrWsJ