如何获取学说中下一个table_id_seq(primary_key)的值?

时间:2019-04-01 11:51:14

标签: php postgresql doctrine-orm primary-key symfony4

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

方法1。通过带有普通sql插入的python脚本

方法2。通过symfony形式

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

方案A:

方法2。使用symfony格式(pid-1)在表中添加一行

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

方法2。另一个用户尝试添加行,并且主义尝试以pid = 2插入,但该规则应为“ 502”

我尝试在实体定义中使用GeneratedValue(strategy =“ AUTO”)和“ IDENTITY”,但这不能解决问题

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

/**
  * @ORM\Id()
  * @ORM\GeneratedValue
  * @ORM\Column(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值

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

  • 用UUID替换自动增量

如果存在,请提出最佳解决方案

1 个答案:

答案 0 :(得分:1)

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

/**
 * @ORM\Id()
 * @ORM\Column(type="integer", options={"default"="nextval('property_id_seq'::regclass)"})
 * @ORM\GeneratedValue(strategy="SEQUENCE")
 */
private $id;

删除现有表并从bin / console更新架构