2016-08-02 28 views
3

私は、フィールドの俳優が、それは完全なリファレンスの代わりにオブジェクトIDを保存することを意味し、注釈

@MongoDB\ReferenceOne(targetDocument="User", simple=true) 

とオブジェクト参照であるMongoDBの

$this->createQueryBuilder() 
      ->field('actor')->in($actorIdArray) 
      ->getQuery() 
      ->execute(); 

で次のクエリを持っています。

$ actorIdArrayが提出された俳優がオブジェクトIDが含まれているため、期待されているフォーム

["5706cb39821b166d3931f34f", "56015f7d4f8bd90b769e6e75"] 

クエリは何も返しません、とのIDの配列です。私は配列をこのよう

[new MongoId("5706cb39821b166d3931f34f"), new MongoId("56015f7d4f8bd90b769e6e75")] 

を構築する場合

しかし、それは私にとって非常に驚くべきである、いずれかの動作しません。ログが表示さ

クエリが

{ "actor": {"$in":[{"$id":"5706cb39821b166d3931f34f"},{"$id":"56015f7d4f8bd90b769e6e75"}]}} 

作られており、私はそれがこの

{ "actor": {"$in":[ObjectId("5706cb39821b166d3931f34f"),ObjectId("56015f7d4f8bd90b769e6e75"]}} 

ない私は、 任意のアイデアを何か間違ったことをやっているかどうかわからようなものであるべきだと思いますか?

+0

ODMのドキュメントの配列である必要があります。 – Alsatian

+0

オブジェクトの読み込みを避けたい場合は、参照を使用してください。http://www.doctrine-project.org/api/mongodb_odm/1.0/class-Doctrine.ODM.MongoDB.DocumentManager.html#_getReference – Alsatian

+0

@Alsatianこのクエリの動作私はコンソールから それを実行した場合、{ "俳優":{ "$の中に":[たObjectId( "5706cb39821b166d3931f34f")のObjectId( "56015f7d4f8bd90b769e6e75"]}} ので、使用の必要が文書の配列は存在しません。 – Fran

答えて

0

Doctrineは、配列がドキュメントの配列であることを望んでいます。

document referencesをクエリなしで読み込むことができます。

$dm = $this->get('doctrine.odm.mongodb.document_manager'): 

$documents = array(); 
foreach($actorIdArray as $id){ 
    $documents[] = $dm->getReference('AppBundle:Actor',$id); // <- this is the key 
} 

$this->createQueryBuilder() 
      ->field('actor')->in($documents) 
      ->getQuery() 
      ->execute(); 
+0

これは$ DM-> getReferenceが を返すものです:(機能しません。 – Fran

関連する問題