Я сейчас в процессе написания тестов для некоторых устаревших кодов. Одно из объектов, над которыми я работаю, содержит ArrayCollection
других объектов в отношениях «один ко многим». Когда я загружаю данные в свои приборы, я вижу, что сущности с одной стороны отношения правильно содержат сущности на стороне многих сторон отношения, используя отладчик PhpStorm.Doctrine 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, но этого не происходит. Есть идеи?
is '$ child3 = new Entity3();' опечатка? – FuzzyTree
Да, это так. Должно быть исправлено сейчас. –
Это типично, когда ваши отношения не имеют правильно настроенного каскадного параметра. Как вы объявляете OneToMany? –