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;

単体テスト中に、1 つの zipgroup を削除するときに、ライセンスで正しく null に設定されていることを確認します。問題は、リポジトリからライセンスをロードすると、NULL ではなくダミーの空のオブジェクト (ID なし) が取得されるように見えることです。多分それはキャッシュされたバージョンですか?

...
$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 で関連する null オブジェクトを正しく処理する方法

4

1 に答える 1

0

削除後、エンティティ マネージャはクリアされませんでした。ID マップをクリアするには、次のコードを呼び出す必要があります。

$this->_em->clear();

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

于 2012-10-22T01:06:33.357 に答える