Doctrine 2 ManyToMany和preUpdate

时间:2014-08-12 10:46:20

标签: php symfony file-upload doctrine-orm

我使用的是Symfony2.5和Doctrine 2.4.2。 我有两个实体,PageImages扩展了Page

页:

 /**
 * @ORM\ManyToMany(targetEntity="PageImage",cascade={"persist"})
 */
private $images;

使用表单集合创建向Page entity

添加图像

当我为PageImage创建一个新条目时,它运行得很好,PrePersist,PreUpdate,PostPersist,PostUpdate全部运行,

但是当我尝试更改现有PageImage的图片时,该事件不会触发,也不会上传新图片。

更新:   它没有更新,因为$ file字段只是一个虚拟和doctrine没有看到新数据,事件没有被触发,所以最简单的解决方案:

  public function setFile(UploadedFile $file = null)
{
    $this->temp = $this->getPath();
    $this->file = $file;
    $this->preUpload();
}

2 个答案:

答案 0 :(得分:0)

我找到了一个解决方案,也许它不是很漂亮,有人可以建议任何其他方法来解决问题。

我已经发现,问题是什么,因为$ file是虚拟字段学说认为实体中没有新数据而且不需要保留或更新它并且事件不会解雇了所以我需要自己运行 setFile ():

public function setFile(UploadedFile $file = null)
{
    $this->temp = $this->getPath();
    $this->file = $file;
    $this->preUpload();
}

答案 1 :(得分:-1)

在“修改”操作中,您必须手动利用“上传”功能。像这样的当前图像的方法

      $currentImage->upload();
      $entityManager->persist($currentImage);  
      $entityManager->flush();