无法将$ push \ / $ pushAll修饰符应用于嵌入对象上的非数组

时间:2012-10-20 19:44:03

标签: php mongodb doctrine-orm doctrine-odm

我有一个文档中嵌入了文档,但是我得到了“无法将$ 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);”因为当我将其移除时,它会消失。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您收到该错误是因为您尝试将讨论变量用作数组,但尚未将其声明为此类。当您在Listing类中声明讨论时,您将要将其声明为空数组:

$discussions = array();