Doctrine Mongo ODM参考3个集合

时间:2012-09-13 13:06:01

标签: mongodb doctrine-odm odm

您好,我试图引用3个收藏品,但我未能通过2> 3参考,让我解释一下我想做什么。

我的User类有参考帖子referenceMany>帖子和帖子我有参考很多>评价。

注意:Doctrine Mongo ODM + Zend Framework 2

用户可以写一篇文章并对其进行评论。

/** @MongoDB\Document */
class Users {

    /** @MongoDB\ReferenceMany(targetDocument="Posts", mappedBy="user") */
    private $posts;

}

/** @MongoDB\Document */
class Posts {

    /** @MongoDB\Id */
    private $wallPostId;

    /** @MongoDB\ReferenceOne(targetDocument="Users", inversedBy="posts") */
    private $user;

    /** @MongoDB\ReferenceMany(targetDocument="Comments", mappedBy="post") */
    private $comments;

    /** @MongoDB\String */
    private $content;

}

/** @MongoDB\Document */
class Comments {

    /** @MongoDB\Id */
    private $commentId;

    /** @MongoDB\ReferenceOne(targetDocument="Posts", inversedBy="comments") */
    private $post;

    /** @MongoDB\String */
    private $content;

}

我尝试使用此代码从任何帖子中获取所有评论

$post = $wallPostsAction->getWallPostById("5051d2a1e71a382c1b000000");
$output = "";
$output .= "Wall post content: " . $post->getContent() . "<br>";
//      $comment = new Comments();
//      $comment->setContent("Nice topic!");
//      $comment->setPost($post);
//      $this->dm->persist($comment);
//      $this->dm->flush();

echo count($post->getComments());
foreach($post->getComments() as $comment){
    $output .= " comment: " . $comment->getComment() . "<br>";
}

其中一个文件看起来像是评论:

{
   "_id": ObjectId("---"),
   "post"?: {
     "$ref": "Posts",
     "$id": ObjectId("---"),
     "$db": "db" 
  },
   "content": "Nice topic!" 
}

问题是为什么当我尝试将它们用于特定帖子时我得到0计数评论但是当我尝试从用户获得帖子时我可以得到它们。

1 个答案:

答案 0 :(得分:0)

因为getComments()返回的所有内容都是该集合的游标。在您开始迭代该集合之前,Doctrine不会运行任何查询来获取信息。

将其添加到getWallPostById方法中的查询中。

->field('comments')->prime(true)

这将告诉学说在您获取帖子时获取有关注释的数据,然后您从getComments获取的光标应该包含您要查找的计数信息。

Priming references