/** @ODM\Document(collection="Entities") */
class Entity extends Document {
/** @ODM\Id */
protected $_id;
/** @ODM\ReferenceOne(targetDocument="\Doctrine\Documents\Entities\Entity2", simple=true) */
protected $entity2;
}
/** @ODM\Document(collection="Entities2") */
class Entity2 extends Document {
/** @ODM\Id */
protected $_id;
/** @ODM\String */
protected $label;
}
Моя проблема заключается в том, когда я называю сущность, на которую ссылаются $entity->getEntity2()
это возвращает entity2
но с public $__isInitialized__ => bool(false)
, Потом когда я пытаюсь позвонить $entity->getEntity2()->getId()
это бросает Doctrine\ODM\MongoDB\DocumentNotFoundException The "Proxies\__CG__\Doctrine\Documents\Entities\Entity2" document with identifier "54de5341642c8769150041a7" could not be found.
Странно, что это происходит, когда я называю это перед рендерингом в моей структуре Когда я делаю то же самое во время метода рендеринга, он работает, но он не работает, например, в методах обработки отправки формы …
Я почистил кеш, прокси и гидраторы. Документ с этим ObjectID
находится в моей базе данных, и он возвращается, только не инициализирован и не может получить ни одно из его свойств, кроме как в методе рендеринга
Это возвращается по телефону getEntity2()
(разум $__isInititalized = false
)
Класс Proxies__CG __ \ Doctrine \ Documents \ Entities \ Entity2 # 178 (6) {
публичные $инициализатор => Закрытие класса # 160 (3) {public $ static =>
array (2) {‘documentPersister’ => class
Doctrine \ ODM \ MongoDB \ Persisters \ DocumentPersister # 166 (11) {…}
‘refleId’ => class ReflectionProperty # 165 (2) {…}} public
$ this => class Doctrine \ ODM \ MongoDB \ Proxy \ ProxyFactory # 78 (7) {
private $ metadataFactory => class
Doctrine \ ODM \ MongoDB \ Mapping \ ClassMetadataFactory # 74 (9) {…}
личное $ uow => класс Doctrine \ ODM \ MongoDB \ UnitOfWork # 76 (23) {…}
private $ proxyNamespace => string (7) «Proxies» private $ proxyGenerator
=> class Doctrine \ Common \ Proxy \ ProxyGenerator # 79 (4) {…} private $ autoGenerate => int (1) private $ определений => array (1) {…}
private $ metadataFactory => class
Doctrine \ ODM \ MongoDB \ Mapping \ ClassMetadataFactory # 74 (9) {…}}
public $ parameter => array (1) {‘$ proxy’ => string (10) «»}} public
$Cloner => Закрытие класса # 170 (3) {public $ static => array (3) {
‘documentPersister’ => класс
Doctrine \ ODM \ MongoDB \ Persisters \ DocumentPersister # 166 (11) {…}
‘classMetadata’ => class
Doctrine \ ODM \ MongoDB \ Mapping \ ClassMetadata # 155 (38) {…}
‘refleId’ => class ReflectionProperty # 165 (2) {…}} public
$ this => class Doctrine \ ODM \ MongoDB \ Proxy \ ProxyFactory # 78 (7) {
private $ metadataFactory => class
Doctrine \ ODM \ MongoDB \ Mapping \ ClassMetadataFactory # 74 (9) {…}
личное $ uow => класс Doctrine \ ODM \ MongoDB \ UnitOfWork # 76 (23) {…}
private $ proxyNamespace => string (7) «Proxies» private $ proxyGenerator
=> class Doctrine \ Common \ Proxy \ ProxyGenerator # 79 (4) {…} private $ autoGenerate => int (1) private $ определений => array (1) {…}
private $ metadataFactory => class
Doctrine \ ODM \ MongoDB \ Mapping \ ClassMetadataFactory # 74 (9) {…}}
public $ parameter => array (1) {‘$ proxy’ => string (10) «»}} public
$IsInitialized => bool (false) защищен $ _id => NULL защищен
$ label => NULL protected $ id => string (24) «54de5341642c8769150041a7»}
Я думаю, что проблема может привести к использованию «simple = true»
Простые ссылки уменьшают объем используемого хранилища, как для самого документа, так и для любых индексов в ссылочном поле; однако простые ссылки не могут использоваться с дискриминаторами, поскольку нет объекта DBRef для хранения значения дискриминатора.
смотреть documetation
Других решений пока нет …