Doctrine 2,删除关联SET NULL返回空对象而不是NULL

时间:2012-10-06 01:08:48

标签: php symfony doctrine-orm

使用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

1 个答案:

答案 0 :(得分:0)

删除后,实体经理未被清除。为了清除身份映射,必须调用以下代码:

$这 - > _em->清除();

来自:https://groups.google.com/forum/#!msg/doctrine-user/73c6h4JgLRY/sQvBjSjzrWsJ