在Doctrine flush之后获取实体字段的新值

时间:2013-09-04 15:57:51

标签: symfony doctrine-orm

我在使用Doctrine持久化实体后尝试调整图像大小。在我的实体代码中,我在刷新和更新之前将字段设置为特定值:

 /**
 * @ORM\PrePersist()
 * @ORM\PreUpdate()
 */
public function preUpload()
{
    if (null !== $this->getFile()) {
        // do whatever you want to generate a unique name
        $filename = sha1(uniqid(mt_rand(), true));
        $this->image = $filename.'.png';
    }
}

因此应该更新图像字段。 然后在我的控制器中,我想做我的调整工作:

if ($form->isValid()) 
    {
        $em->persist($activite);
        $em->flush();

        //resize the image
        $img_path = $activite->getImage();
        resizeImage($img_path);
    }

但是,在代码的这一点上,$ activite-> image的值仍为null。我怎样才能获得新值?

(一切都在数据库中保存得很好。)

2 个答案:

答案 0 :(得分:3)

EntityManager有一个refresh()方法,可以使用数据库中的最新值更新您的实体。

$em->refresh($entity);

答案 1 :(得分:0)

我发现了我的错误。

实际上,我正在学习本教程:http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html

并且在某些时候他们给这个代码设置文件:

 public function setFile(UploadedFile $file = null)
{
    $this->file = $file;
    // check if we have an old image path
    if (isset($this->path)) {
        // store the old name to delete after the update
        $this->temp = $this->path;
        $this->path = null;
    } else {
        $this->path = 'initial';
    }
}

然后在上传后,在第一个版本(随机文件名)中,他们执行:

$this->file = null;

但是在第二个版本中,此代码替换为:

$this->setFile(null);

我的问题是我已经尝试了两个版本,最终回到第一个版本。但是,我忘了更改行以将文件设置为null,因此每次我的路径字段都重置为null。

对于这种荒谬感到抱歉,感谢您的帮助。