如何在教义上获得下一个table_id_seq(primary_key)的价值?



我正在symfony 4的一个项目中工作,数据库在postgresql中。有两种方法可以更新数据库:

方法 1.通过带有纯 SQL 插入的 python 脚本

方法2.通过Symfony形式

这两种方法都写入同一个表。

方案 A:

方法 2. 使用 symfony 窗体 (pid - 1) 向表中添加一行

方法1.使用python脚本添加500行(pid序列达到501)

方法 2.另一个用户尝试添加一行,并且 doctrine 尝试插入 pid = 2,但它应该是"502"

我尝试在实体定义中使用Generated Value(strategy="AUTO")和"IDENTITY",但这并不能解决问题

/* 字段的实体类定义 */

/**
* @ORMId()
* @ORMGeneratedValue
* @ORMColumn(type="integer")
*/
private $id;

/* 表单提交处理程序 */

$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()){
$data =$form->getData();
$property = new Property();
$property->setTitle($data['title']);
$property->setDescription($data['description']);
$property->setPrice($data['price']);
$em->persist($property);
$em->flush();
return $this->redirectToRoute('property');
}

可能的解决方案

  • 在实体类中定义字段,使其自动获取下一个auto_increment值

  • 从窗体插入之前获取下一个auto_increment值

  • 将postgresql替换为mysql(如果有帮助的话)

  • 将auto_increment替换为 UUID

如果存在,请建议哪个是最佳解决方案

查看您的实体类,我认为从序列表中为 id 设置自动值的声明不完整。请尝试此声明。它对我有用

/**
* @ORMId()
* @ORMColumn(type="integer", options={"default"="nextval('property_id_seq'::regclass)"})
* @ORMGeneratedValue(strategy="SEQUENCE")
*/
private $id;

删除现有表并从 bin/控制台更新架构

相关内容

  • 没有找到相关文章

最新更新