![](/img/trans.png)
[英]doctrine-mongoDB - ContextErrorException: Warning: Illegal offset
[英]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.