によって配列として扱わMongoIDプロパティは、質問に:は、私はMongoDBのODMエンティティのReferenceOneを使用しようとしているが、その後教義ハイドファイルが生成され、次のエラーが返されDoctrineODM
/**
* 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'];**
}
であることが判明しました
何らかの理由で、fieldMappingが "単純"と見なされません。正しく理解すれば、それを設定できると、最初の句が入力され、正しく動作するはずです。しかし、私はDoctrine documentationではプロパティを「シンプル」と設定することについて何も見つかりませんでした。その値はどのようにして決定されますか、プロパティを定義するときに設定できますか?
私は無関係な(imho)部品を残しました。それ以上の情報が必要な場合は、私はそれを提供します。前もって感謝します!問題の犯人かもしれこれら二つを組み合わせること - 私はフィールドが@ReferenceOne
として、または@Field
のいずれかとしてマッピングする必要があります0.9.1
実際には、プロパティを定義するときに 'simple = "true"'オプションを追加すると、ほとんど問題はなくなりました。現在は機能しますが、他の何かが私の注意を引いた - 生成されたハイドレーターは次の行を持っています: $ return = > dm-> getReference($ className、$ id); ドキュメントでは、「識別子が入力された部分オブジェクトのみ」が返されますが、imhoは役に立たない(私はすでにフィールドからの識別値を持っています)。誰かがポインタを進める方法を教えてくれますか? –
部分オブジェクトは初期化され、必要なときにすべてのデータをロードする(つまりIDを取得していない最初のプロパティ/メソッドのアクセス時に) 'Proxy'です - それは遅延読み込みのためです – malarzm
それは判明しましたXdebugは何らかの理由でそれらを正しく解析しません。 –