Symfony2:持续onetomany-manytoone实体的异常

时间:2015-04-24 10:36:03

标签: php symfony

我正在构建一个在嵌入式文件提交表单中的条目表单。这两个实体通过双向关系相关联:

class Entry
{
     /**
      *@ORM\OneToMany(targetEntity="OOTN\BlogBundle\Entity\Image", mappedBy="Entry", cascade={"persist"})
      *@ORM\JoinColumn(nullable=false)
      */
      private $image;

      //rest of Entry class

class Image
{
    /**
     *@ORM\ManyToOne(targetEntity="OOTN\BlogBundle\Entity\Entry", cascade={"persist"})
     *@ORM\JoinColumn(nullable=false)
    */
    private $entry;

    //attributes id, date, url and alt here

    private $file;


    public function upload()
    {
         if (null === $this->file)
         {
             return;
         }
         $name = $this->file->getClientOriginalName();

         $this->file->move($this->getUploadRootDir(), $name);
         $this->url = $name;
         $this->alt = $name;
    }

    //functions getUploadDir and getUploadRootDir here

表单嵌入正常但是在持续输入时,我收到一个SQL错误,告诉我image的entry_id为null。我认为symfony会自己解决这个问题,但我仍然试图在控制器中手动设置它,如下所示:

    $entry->getImage()->setEntry($entry);

当我这样做时,不仅entry_id为null,而且url和alt也是如此。就好像upload()没有完成它的工作(但它确实如此,因为文件确实上传了)。我无法弄明白,有人知道发生了什么?

1 个答案:

答案 0 :(得分:0)

感谢Ninir的评论,我想通了。确实在入门类中需要一个addImage方法,加上一个如下所示的构造函数:

public function __construct()
{
    $this->image = new ArrayCollection(); 
    //don't forget a "use Doctrine\Common\Collections\ArrayCollection;" statement
}

在您的控制器中,执行以下操作:

$listImages = $entry->getImage();

foreach($listImages as $image)
{
    $entry->addImage($image);
    $image->setEntry($entry);
    $image->upload();
}

它为我做了诀窍。