我目前正在編寫一些遺留代碼的測試過程。我正在處理的其中一個實體包含ArrayCollection
其他實體,它們是一對多關係。當我在我的裝置中加載數據時,我可以看到關係一側的實體使用PhpStorm的調試器正確地包含關係多方的實體。學說2 - 使用PersistentCollection
顯然,ArrayCollection
在數據庫中持久化時會變成PersistentCollection
。
我目前正在測試的方法是試圖迭代通過這個新形成的PersistentCollection
與foreach
,但是,好吧,什麼都沒有發生。根據調試器,該集合包含關係元數據,但不會檢索我輸入到原始ArrayCollection
中的值。
示例僞代碼(由於NDA):
class Entity1
{
private $items;
public function __construct() {
$this->items = new ArrayCollection();
}
public function addItem(Entity2 $item) {
$this->items[] = $item;
}
public function getItems() {
return $this->items;
}
}
class Entity2 {}
$child1 = new Entity2();
$child2 = new Entity2();
$child3 = new Entity2();
$ent = new Entity1();
$ent->addItem($child1);
$ent->addItem($child2);
$ent->addItem($child3);
// persist them all with the entity manager
// end data fixtures
// inside a different file, in the method I'm trying to test:
$items = $ent->getItems();
foreach ($items as $item) {
// nothing happens as $items contains metadata/relationship data, but doesn't (lazy) load
// the Entity2 instances
}
下面是一個什麼樣的在PersistentCollection
實際截圖:
注意如何coll
集合,我假設是什麼應該填充我的Entity2
實例,是空的。
所以,我有點不知所措。我需要能夠訪問Entity2實例,但沒有發生。有任何想法嗎?
是'$ child3 = new Entity3();'一個錯字? – FuzzyTree
是的。現在應該修復。 –
這是典型的當你的關係沒有正確配置的級聯參數。你如何宣佈OneToMany? –