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
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? –
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
Ja, es stellte sich heraus dass es richtig funktioniert, aber Xdebug analysiert sie aus irgendeinem Grund nicht richtig. –