Невозможно применить модификатор $push\/$pushAll к не массиву во встроенных объектах
У меня есть документ со встроенными документами, но я получаю сообщение об ошибке "Невозможно применить $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();
Ошибка, которую я получаю, находится в строке "$ перечисление->addDiscussions($ обсуждение);" потому что, когда я удаляю это, оно уходит.
Что я делаю неправильно?
1 ответ
Вы получаете эту ошибку, потому что вы пытаетесь использовать переменную Discussions в качестве массива, но вы еще не объявили ее как таковую. Когда вы объявляете обсуждения в классе Listing, вы хотите объявить его как пустой массив:
$discussions = array();