1

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

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

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

class Post {

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

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

}

我不想单独收集评论。我希望它们保存在每个帖子中。

4

3 回答 3

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 中最流行的嵌入示例相反。我也开始将评论作为嵌入,但后来遇到一些问题并决定将它们存储在单独的集合中。我不记得所有的问题,但主要的问题是无法在数据库端对评论进行排序。快速的解决方案是在客户端对它们进行排序,但是在分页方面,它只是无法扩展。

于 2011-11-28T19:08:05.107 回答
0

我认为这就是你要找的东西:http: //www.doctrine-project.org/docs/mongodb_odm/1.0/en/reference/embedded-mapping.html

于 2011-11-28T11:42:08.213 回答
-2

在我的 __construct() 我需要

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

你刚刚拥有的地方

new ArrayCollection();
于 2012-02-06T12:35:29.563 回答