【发布时间】:2016-05-23 19:32:26
【问题描述】:
我有一个带有字段的实体,它不包含在表单中,而是根据输入附带的其他字段值计算得出的。 目前该值是在生命周期回调中设置的:
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function prePersist() {...}
我希望这个值在 DB 表列的范围内保持唯一,并在保存之前对其进行修改,直到它是唯一的一个。
我尝试使用
UniqueEntity,但在创建实体对象时,该字段的值为 NULL(未知)。所以它会在表单提交后,在验证时保留。当prePersist()被实际调用时,该值会出现并在没有验证的情况下进入数据库。我可能会尝试获取
EntityRepository实例,并尝试将检查作为来自prePersist()的SQL 查询,但它看起来非常难看。我可能会尝试使用一种散列函数,如 md5 或 sha1,它们主要保证值的唯一性,但散列函数存在冲突,我希望保持该值“人类可读”。
请给我一个“Symfony”风格的解决方案来解决这个问题。
【问题讨论】:
-
我不太明白你的需求是什么。您是否想要一种生成自动创建并分配给每个新条目的唯一且可读的标识符的好方法?
-
“人类可读”是什么意思?你喜欢哪种格式?
-
是的,我需要一种基于用户输入生成唯一可读标识符的方法。如果可能,它应该在数据库记录编辑时更新,并且在任何情况下仍然是唯一的。如果需要,“人类可读”意味着易于阅读和记忆(可能部分记忆)。
标签: php symfony doctrine entity