Учреждение doctrine2 не инициализировано

У меня есть класс вроде следующего:

/** @Entity **/ class orgGroup{ //id and stuff... /** * @Column(type="string") **/ private $name; /** * @Column(type="string", nullable=true) **/ private $description; /** * @ManyToOne(targetEntity="orgGroupType", inversedBy="_orgGroups") * @JoinColumn(name="_orgGroupType") **/ private $_orgGroupType; //... } 

Но когда я загружаю этот объект из своей базы данных через

 $groups = $em->getRepository("orgGroup")->findAll(); 

Я просто получил имя правильно, но не _orgGroupType … и я не знаю, почему … OrgGroup является владельцем orgGroupType и его единственным ОДНОМ объектом, а не массивом. Мой веб-сервис всегда просто говорит:

 {"error":[],"warning":[],"message":[],"data":[{"name":"AdministratorGroup","description":null,"_orgGroupType":{"__ isInitialized __":false}}]} 

Результат:

 "name":"AdministratorGroup", "description":null, "_orgGroupType":{"__ isInitialized __":false} 

но должно быть:

 "name":"AdministratorGroup", "description":"some description", "_orgGroupType":{name:"test"} 

Итак, есть 2 ошибки … и я понятия не имею, почему. Все данные правильно установлены в базе данных.

Есть идеи?

EDIT: Вот недостающий код моего orgGroupType -entity

 /** @Entity **/ class orgGroupType { /** * @OneToMany(targetEntity="orgGroup", mappedBy="_orgGroupType") **/ private $_orgGroups; public function __construct() { $this->_orgGroups = new ArrayCollection(); } } 

Solutions Collecting From Web of "Учреждение doctrine2 не инициализировано"

Это выглядит как проблема с ленивой загрузкой. Как вы получаете данные из объекта в ответ на Webservice?

Doctrine2 lazy-load, если вы не настроили что-то еще, это означает, что ваши $groups = $em->getRepository("orgGroup")->findAll(); не возвратит реальные объекты orgGroup , а объекты Proxy ( документация Doctrine ).

Это означает, что объект $group не будет иметь его описание или значение orgGroupType, пока вы не вызовете $group->getDescription() или $group->getOrgGroupType() (тогда Doctrine загружает их автоматически), поэтому вам нужно сделать это, прежде чем писать данных в JSON-ответ для веб-службы. Он не будет работать, если вы каким-то образом пройдете через свойства объекта, не используя методы getter.

Надеюсь, это была проблема 🙂

Попробуйте изменить режим выборки. @ORM \ ManyToOne (targetEntity = "****", fetch = "EAGER"). Это сработало для меня.

Не забудьте инициализировать коллекцию orgGroups в объекте orgGroupType

 /** * @OneToMany(targetEntity="orgGroup", mappedBy="_orgGroupType") */ protected $orgGroups ; public function __construct() { $this->orgGroups = new ArrayCollection(); } 

Возможно, вам потребуется включить следующее в Entity

 use Doctrine\Common\Collections\Collection, Doctrine\Common\Collections\ArrayCollection;