0

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

任何的想法?

看起来像这个问题: 如何在 symfony 1.4 中正确处理相关的空对象

4

1 回答 1

0

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

$this->_em->clear();

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

于 2012-10-22T01:06:33.357 回答