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 存储引用,因此您不能简单地执行 findOneByUser($user) ,除非您自己创建了此方法。

于 2012-10-29T12:09:25.707 回答
0

您必须为@ReferenceOne使用Query Builder的references()方法,例如https://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/query-builder-api.html

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


PS:使用includesReferenceTo()一个@ReferenceMany

于 2015-10-09T13:05:19.997 回答