Я пытаюсь использовать ReferenceOne для MongoDB ODM Сущности, но тогда файл Доктрина Hydrator генерируется, возвращается следующее сообщение об ошибке:Mongoid рассматривается как массив по DoctrineODM
Fatal error: Cannot use object of type MongoId as array in /var/www/project/data/DoctrineMongoODMModule/Hydrator/ApplicationDocumentTokenEntryHydrator.php
Вот определение из недвижимость в вопросе:
/**
* Page Mongo Id from Pages entry
*
* @ODM\Field(name="pageInternalId", type="object_id")
* @ODM\ReferenceOne(targetDocument="Page\Document\PagesEntry")
* @var \MongoId
*/
protected $pageInternalId;
Я вырыл немного в сгенерированном увлажняющее и в DoctrineODMModule и выяснили, что следующий фрагмент является проблемой
if (isset($this->class->fieldMappings['pageInternalId']['simple']) && $this->class->fieldMappings['pageInternalId']['simple']) {
$className = $this->class->fieldMappings['pageInternalId']['targetDocument'];
$mongoId = $reference;
} else {
$className = $this->unitOfWork->getClassNameForAssociation($this->class->fieldMappings['pageInternalId'], $reference);
**$mongoId = $reference['$id'];**
}
По какой-то причине полеМарпирование не считается/задано как «простое» - если я правильно его понимаю, если я могу установить его как таковой, он войдет в первое предложение и должен работать правильно. Тем не менее, я не нашел ничего в Doctrine documentation о настройке свойства как «простого». Как определяется это значение, может ли оно быть задано при определении свойства?
Я оставил неотвязную (imho) детали, если требуется больше информации, я предоставлю ее. Заранее спасибо!
Я использую DoctrineODMModule 0.9.1
На самом деле, добавив опцию 'simple = "true" при определении свойства почти фиксированной - теперь она работает, но что-то еще привлекло мое внимание - сгенерированный гидратор имеет следующую строку: $ return = $ this- > dm-> getReference ($ className, $ id); , который по документации возвращает только «частичный объект, который имеет только свой идентификатор», что, imho бесполезно (у меня уже есть значение идентификатора из поля). Может ли кто-нибудь предоставить указателям, как действовать? –
Частичный объект - это «Прокси», который будет инициализирован и загрузит все его данные, когда они вам понадобятся (т.е. при первом доступе свойств/методов, который не получает идентификатор) - это для ленивой загрузки – malarzm
Да, оказалось, что он работает правильно, но Xdebug не разбирает их правильно, по какой-то причине. –