gpt4 book ai didi

symfony - 预更新未触发

转载 作者:行者123 更新时间:2023-12-03 21:00:58 25 4
gpt4 key购买 nike

我的实体中有此方法:

/**
* @ORM\PreUpdate()
* @ORM\PrePersist()
*/
public function preStore() {
if ($this->getPictureFile()) {
$newFilename = sha1(mt_rand());
$newFilename = $newFilename . '.' . ($this->getPictureFile()->guessExtension());
$this->setPictureFilename($newFilename);
}
}


当持久化对象时,一切工作都非常完美,但是在更新时根本不会触发该方法,因此我对此进行了测试:

/**
* @ORM\PreUpdate()
* @ORM\PrePersist()
*/
public function preStore() { var_dump('asdasdasdadsdasdas');
if ($this->getPictureFile()) {
$newFilename = sha1(mt_rand());
$newFilename = $newFilename . '.' . ($this->getPictureFile()->guessExtension());
$this->setPictureFilename($newFilename);
}
}


在持久化var_dump中有效,但是当我更新对象时-不会。为什么?

最佳答案

仅当更改实体字段(从理论上观察到)时,才会进行更新,依此类推,只有在更改后才调用preupdate方法。

注意:我猜您的图片文件不是“教义”列,依此类推。因此,您的实体不会因​​学说而改变。

来自How to handle File Uploads with Doctrine食谱文章


仅当持久保留的实体字段之一发生更改时,才触发PreUpdate和PostUpdate回调。这意味着,默认情况下,如果仅修改$ file属性,则不会触发这些事件,因为该属性本身不会通过Doctrine直接保留。一种解决方案是使用保留在Doctrine中的更新字段,并在更改文件时手动对其进行修改。


编辑:或者您使用Uploadable behaviordoctrine extensions

关于symfony - 预更新未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17381552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com