繁体   English   中英

通过参考doctrine-mongodb查找

[英]findBy reference 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()))

am!

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

试试吧,为我工作。 您必须查询所有元素似乎有点愚蠢。

如果您正确映射了文档关系,那么您要做的就是

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

您可能需要查看双向参考原则文档

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

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

您必须对@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM