我有一个文档,其中嵌入了文档,但是即使数据持续存在,我也无法将"无法将$ push/$ peckall修饰符应用于非阵列"错误。
这是我的文档:
/**
* @MongoDBEmbeddedDocument
*/
class Author
{
/**
* @MongoDBInt
*/
protected $id;
/**
* @MongoDBString
*/
protected $name;
}
这是我的评论文档,嵌入了作者文档:
/**
*@MongoDBDocument(collection="discussions")
*/
class Discussion
{
/**
* @MongoDBId
*/
protected $id;
/**
* @MongoDBObjectId
*/
protected $discussion_id;
/**
* @MongoDBString
*/
protected $slug;
/** @MongoDBEmbedOne(targetDocument="Author") */
protected $author;
/**
* @MongoDBString
*/
protected $text;
/**
* @MongoDBDate
*/
protected $createdAt;
}
最后,这是我的列表文档嵌入讨论文档
class Listing
{
/**
* @MongoDBId
*/
protected $id;
/** @MongoDBReferenceMany(targetDocument="Discussion") */
protected $discussions;
public function __construct()
{
$this->discussions = new DoctrineCommonCollectionsArrayCollection();
}
/**
* Add discussions
*
* @param MainSomeBundleDocumentDiscussion $discussions
*/
public function addDiscussions(MainSomeBundleDocumentDiscussion $discussions)
{
$this->discussions[] = $discussions;
}
/**
* Get discussions
*
* @return DoctrineCommonCollectionsCollection $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-> adddiscussions($ descold);"中。因为当我删除它时,它会消失。
我在做什么错?
您正在遇到该错误,因为您正在尝试将讨论变量用作数组,但是您尚未将其声明为此。当您在列表类中声明讨论时,您需要将其声明为一个空数组:
$discussions = array();