如何使用Doctrine ODM将文档存储在另一个文档中?

时间:2011-11-27 18:54:43

标签: php mongodb symfony doctrine-orm doctrine-odm

如何使用Doctrine ODM将文档存储在另一个文档中?

我没有在文档中看到Array或Json类型。

我希望能够做到这样的事情:

class Post {

    /**
     * @MongoDB\String
     */
    protected $body;

    /**
     * @MongoDB\Array
     */
    protected $comments = array();

}

我不想单独收集评论。我想把它们保存在每个帖子里。

3 个答案:

答案 0 :(得分:2)

/**
 * @MongoDB\Document
 */
class Post
{
    /**
     * @MongoDB\Id
     */
    private $id;

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

    /**
     * @MongoDB\EmbedMany(targetDocument="Comment")
     */
    private $comments;

    public function __construct()
    {
        $this->comments = new ArrayCollection();
    }
}

/**
 * @MongoDB\EmbeddedDocument
 */
class Comment
{
    /**
     * @MongoDB\String
     */
    private $body;
}

但请注意,评论不适合嵌入 - 与MongoDB中最流行的嵌入示例相反。我也开始将注释作为嵌入,但后来遇到了一些问题并决定将它们存储在一个单独的集合中。我不记得所有的问题,但主要的是无法对数据库方面的注释进行排序。快速解决方案是在客户端对它们进行排序,但是当涉及到分页时,它只是不能扩展。

答案 1 :(得分:0)

答案 2 :(得分:-1)

在我的__construct()中我需要

new \Doctrine\Common\Collections\ArrayCollection();

你只有

new ArrayCollection();