如何使用Doctrine ODM将文档存储在另一个文档中?
问题描述:
如何使用Doctrine ODM将文档存储在另一个文档中?如何使用Doctrine ODM将文档存储在另一个文档中?
我在文档中看不到数组或Json类型。
我希望能够做这样的事情:
class Post {
/**
* @MongoDB\String
*/
protected $body;
/**
* @MongoDB\Array
*/
protected $comments = array();
}
我不希望有征求意见的独立集合。我希望他们保存在每个帖子里面。
答
/**
* @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中埋件的可能是最流行的例子。我从嵌入的意见开始,但后来遇到了一些问题,并决定将它们存储在单独的集合中。我不记得所有的问题,但主要的问题是无法对数据库端的评论进行排序。快速解决方案是在客户端对它们进行分类,但是当涉及到分页时,它不能进行扩展。
答
在我的__construct()我需要
new \Doctrine\Common\Collections\ArrayCollection();
,你只需要
new ArrayCollection();
我曾问尝试过这一点,但它说的ArrayCollection()无效或东西。列举检查 – HappyDeveloper
Class Doctrine \ Common \ Collections \ ArrayCollection不是有效的文档或映射的超类。 – HappyDeveloper
您是否尝试清除缓存? MongoDBBundle有一些缓存问题,所以即使在开发环境中,有时候也需要清除它。 –