2016-05-18 5 views
0

によって配列として扱わ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

答えて

0

DoctrineODMModuleに使用してい

。それ以外に、@ReferenceOneとしてマップされたプロパティには、参照されるオブジェクトが含まれます(コードの観点からは、実際にはMongoIDになりますが、ODMのタスクであるため気にする必要はありません)。

+0

実際には、プロパティを定義するときに 'simple = "true"'オプションを追加すると、ほとんど問題はなくなりました。現在は機能しますが、他の何かが私の注意を引いた - 生成されたハイドレーターは次の行を持っています: $ return = > dm-> getReference($ className、$ id); ドキュメントでは、「識別子が入力された部分オブジェクトのみ」が返されますが、imhoは役に立たない(私はすでにフィールドからの識別値を持っています)。誰かがポインタを進める方法を教えてくれますか? –

+0

部分オブジェクトは初期化され、必要なときにすべてのデータをロードする(つまりIDを取得していない最初のプロパティ/メソッドのアクセス時に) 'Proxy'です - それは遅延読み込みのためです – malarzm

+0

それは判明しましたXdebugは何らかの理由でそれらを正しく解析しません。 –

関連する問題