findBy参考doctrine-mongodb

时间:2012-10-26 16:14:35

标签: mongodb symfony doctrine-orm symfony-2.1 doctrine-mongodb

我有用户和帖子的集合。

用户看起来像

{ "_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()))

3 个答案:

答案 0 :(得分:6)

<强>的Bam <!/强>

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

尝试一下,为我工作。你必须查询所有元素似乎有点愚蠢。

答案 1 :(得分:2)

如果您正确地映射了文档关系,那么您只需要

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

您可能需要查看Bidirectional References Doctrine Documentation

如果要手动查找用户的帖子(更繁琐的方式),则必须在Post存储库中创建名为findOneByUser($ user)的方法。然后你必须将用户ID转换为MongoId然后使用querybuilder将用户。$ id字段匹配到将返回光标的MongoId。

请记住,当您创建一个引用另一个文档的文档(在本例中为post)时,它会通过MongoId存储引用,因此您不能只是执行findOneByUser($ user),除非您自己创建了此方法。

答案 2 :(得分:0)

您必须使用查询生成器的 references() 方法来获取 @ReferenceOne ,例如https://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/query-builder-api.html

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


PS :使用 includesReferenceTo() a @ReferenceMany