我在orm学说中创建实体,ID配置为
#[ORM\Id]
#[ORM\Column(type: Types::INTEGER)]
#[ORM\GeneratedValue]
private int $id;
, 实体有唯一键
#[ORM\Column(type: Types::STRING, unique: true)]
private string $username;
#[ORM\Column(type: Types::STRING, unique: true)]
private string $email;
问题是,如果您尝试使用相同的电子邮件或用户名在事务中添加第二条记录,尽管 INSERT 不会被执行并且异常将被捕获
"An exception occurred while executing a query: Duplicate entry 'username' for key 'users.username'"
并完成$conn->rollBack()
, AUTO_INCREMENT 会增加。在下一次添加时(如果在此之前成功的 INSERT 返回 ID = 1),它 (ID) 将不是 2,而是 3。
如何正确实现正确的缩放和/或 AI 整形?
UPD:+ 添加了 prePersist
public function checkExistingRecords(array $fields, LifecycleEventArgs $args) {
$obj = $args->getObject();
$repository = $args->getObjectManager()->getRepository($obj::class)->findOneBy($fields);
if($repository instanceof $obj) {
throw new EntityAlreadyExistsException($obj::class);
}
}