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