1

ユーザーと投稿のコレクションがあります。

ユーザーは次のようになります

{ "_id" : ObjectId("5089cc4c7b03b9902b000000"), "facebook_id" : "522128874" }

投稿は次のようになります

{ "_id" : ObjectId("508aa21b7b03b9780800000f"), "facebook_id" : "10150709375878875", "user" : DBRef("User", ObjectId("5089cc4c7b03b9902b000000")), "message" : " Julia dream, dreamboat queen, queen of all my dreams", "updated_time" : 1333502938 }

特定のユーザーのすべての投稿を検索したい。

$user = $userRepo->findOneByFacebookId('522128874');
$posts = $postRepo->findOneByUser($user)

動作しません。私も試しました

$posts = $postRepo->findOneBy(array('user' => $user))

$posts = $postRepo->findOneBy(array('user' => $user->getId()))
4

3 に答える 3

6

バム!

$posts = $postRepo->findOneBy(array('user.id' => $user->getId()))

それを試して、私のために働いた。すべての要素をクエリする必要があるのはちょっとばかげているように思われます。

于 2013-05-08T05:18:51.920 に答える
2

ドキュメントの関係を正しくマッピングした場合、必要なのは

$user = $userRepo->findOneByFacebookId($fbid);
$posts = $user->getPosts();

双方向リファレンスのドクトリンドキュメントをご覧になることをお勧めします

ユーザーの投稿を手動で検索する場合(より面倒な方法)、Postリポジトリ内にfindOneByUser($ user)というメソッドを作成する必要があります。次に、ユーザーIDをMongoIdに変換してから、querybuilderを使用してuser。$idフィールドをMongoIdに一致させる必要があります。MongoIdはカーソルを返します。

別のドキュメントへの参照を持つドキュメント(この場合は投稿)を作成すると、MongoIdを介して参照が保存されるため、このメソッドを自分で作成しない限り、単にfindOneByUser($ user)を実行することはできません。

于 2012-10-29T12:09:25.707 に答える
0

https://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/query-builder-api.htmlのような@ReferenceOneには、Query Builderのreferences()メソッドを使用する必要があります。

$qb = $postRepo->createQueryBuilder('u')
               ->field('user')->references($user);


PSincludesReferenceTo() @ReferenceManyを使用します

于 2015-10-09T13:05:19.997 に答える