PostPersist正在调用但未保存



我有一个实体,它使用PostPersist生命周期挂钩基于数字ID和salt创建哈希。

我已经验证了setHash方法被触发并分配了一个正确的字符串(通过日志记录(,但是数据库中的hash列是空的。

是什么阻止了价值的保存?

/**
* Deployment
*
* @ORMTable(name="deployments")
* @ORMEntity(repositoryClass="AppBundleRepositoryDeploymentRepository")
* @ORMHasLifecycleCallbacks()
*/
class Deployment
/**
* @var int
*
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORMColumn(type="string", length=16, nullable=true)
*/
protected $hash;
...
/**
* @ORMPostPersist
*/
public function setHash()
{
$hashids = new Hashids($this->hashSalt, 5, 'abcdefghijkmnopqrstuvwxyz');
$this->hash = $hashids->encode($this->getId());
}
...
}

来自条令文档:

postUpdate、postRemove、postPersist这三个post事件在EntityManager#flush((内部调用。此处的更改与数据库中的持久性无关,但您可以使用这些事件来更改非持久性项目,如未映射的字段、日志记录,甚至是未由Doctrine直接映射的关联类。

这意味着您对实体的更改将不会在perit((和flush((之间保存

如果你真的需要一个事件,你可以尝试postFlushEvent,在那里你可以检查哈希是否为null,如果是的话,设置它并再次刷新,但要注意无休止的循环(确保只有当哈希为null时才重新刷新(。

但每次您的entityManager刷新时,该事件都会触发,以进行更新。我的建议是,如果您只在代码的一个地方坚持,只需手动执行即可。如果有几个地方可以持久化实体,请选择事件。

相关内容

  • 没有找到相关文章

最新更新