2016-05-18 16 views
0

Ich versuche, eine ReferenceOne für eine MongoDB ODM Entity zu verwenden, aber dann wird die Lehre Hydrator Datei erzeugt, wird der folgende Fehler zurückgegeben:als Array behandelt MongoID von DoctrineODM

Fatal error: Cannot use object of type MongoId as array in /var/www/project/data/DoctrineMongoODMModule/Hydrator/ApplicationDocumentTokenEntryHydrator.php

Hier ist die Definition der Immobilien in Frage:

/** 
     * Page Mongo Id from Pages entry 
     * 
     * @ODM\Field(name="pageInternalId", type="object_id") 
     * @ODM\ReferenceOne(targetDocument="Page\Document\PagesEntry") 
     * @var \MongoId 
     */ 
     protected $pageInternalId; 

grub ich ein wenig in der generierten Hydrator und in den DoctrineODMModule und fanden heraus, dass der folgende Code-Schnipsel das Problem ist

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'];** 
      } 

Aus irgendeinem Grund wird das FieldMapping nicht als "einfach" betrachtet/festgelegt - wenn ich es richtig verstehe, wenn ich es so einstellen kann, wird es die erste Klausel eingeben und sollte ordnungsgemäß funktionieren. Allerdings habe ich in der Doctrine documentation nichts über das Festlegen einer Eigenschaft als "einfach" gefunden. Wie wird dieser Wert ermittelt, kann er beim Definieren der Eigenschaft festgelegt werden?

Ich verließ die nicht verwandten (imho) Teile, wenn weitere Informationen benötigt werden, werde ich es zur Verfügung stellen. Vielen Dank im Voraus!

ich DoctrineODMModule bin mit 0.9.1

Antwort

0

Das Feld sollte entweder als @ReferenceOne oder als @Field abgebildet werden - diese beiden Kombination der Täter von Problem sein kann. Abgesehen davon enthält Eigenschaft, die als @ReferenceOne zugeordnet ist, ein referenziertes Objekt (aus der Sicht des Codes, in der Datenbank wird es tatsächlich MongoID sein, aber Sie müssen sich nicht darum kümmern, da es die Aufgabe von ODM ist).

+0

Eigentlich Hinzufügen der 'Simple = "True"' Option beim Definieren der Eigenschaft fast behoben - es funktioniert jetzt, aber etwas anderes hat meine Aufmerksamkeit erregt - der generierte Hydrator hat die folgende Zeile: $ return = $ this- > dm-> getReference ($ className, $ id); , die durch die Dokumentation nur "ein Teilobjekt, das nur seinen Bezeichner aufgefüllt hat" zurückgibt, das, imho ist nutzlos (ich habe bereits den Bezeichner Wert aus dem Feld). Kann jemand Hinweise geben, wie es weitergeht? –

+0

Das Teilobjekt ist ein 'Proxy', der initialisiert wird und alle seine Daten lädt, sobald sie benötigt werden (dh beim ersten Zugriff auf Eigenschaft/Methode, der die ID nicht bekommt) - es ist aus Gründen des Lazy loading – malarzm

+0

Ja, es stellte sich heraus dass es richtig funktioniert, aber Xdebug analysiert sie aus irgendeinem Grund nicht richtig. –