我有一个文档中嵌入了文档,但是我得到了“无法将$ push / $ pushAll修饰符应用于非数组”错误,即使数据被持久化也是如此。
这是我的文件:
/**
* @MongoDB\EmbeddedDocument
*/
class Author
{
/**
* @MongoDB\Int
*/
protected $id;
/**
* @MongoDB\String
*/
protected $name;
}
以下是我的评论文档,其中嵌入了作者文档:
/**
*@MongoDB\Document(collection="discussions")
*/
class Discussion
{
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\ObjectId
*/
protected $discussion_id;
/**
* @MongoDB\String
*/
protected $slug;
/** @MongoDB\EmbedOne(targetDocument="Author") */
protected $author;
/**
* @MongoDB\String
*/
protected $text;
/**
* @MongoDB\Date
*/
protected $createdAt;
}
最后,这是我的上市文件,其中嵌入了讨论文件
class Listing
{
/**
* @MongoDB\Id
*/
protected $id;
/** @MongoDB\ReferenceMany(targetDocument="Discussion") */
protected $discussions;
public function __construct()
{
$this->discussions = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add discussions
*
* @param Main\SomeBundle\Document\Discussion $discussions
*/
public function addDiscussions(\Main\SomeBundle\Document\Discussion $discussions)
{
$this->discussions[] = $discussions;
}
/**
* Get discussions
*
* @return Doctrine\Common\Collections\Collection $discussions
*/
public function getDiscussions()
{
return $this->discussions;
}
}
因此,在我的代码中,我正在执行以下操作以将数据放入:
$author = new Author();
$author->setId( 1 );
$author->setName("blahblah"); //for now the user name is the author name
$discussion = new Discussion();
$discussion->setAuthor($author);
$dm->persist($discussion);
$listing->addDiscussions($discussion); <---- I GET THIS HERE!!!!
$dm->persist($listing);
$dm->flush();
我得到的错误是“$ listing-&gt; addDiscussions($ discussion);”因为当我将其移除时,它会消失。
我做错了什么?
答案 0 :(得分:0)
您收到该错误是因为您尝试将讨论变量用作数组,但尚未将其声明为此类。当您在Listing类中声明讨论时,您将要将其声明为空数组:
$discussions = array();