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

标签 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. 另一个用户尝试添加一行,而 doctrine 尝试插入 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 值

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

  • 用 UUID 替换 auto_increment

如果存在,请建议最好的解决方案

最佳答案

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

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

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

关于php - 如何获取学说中下一个table_id_seq(primary_key)的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55454459/

相关文章:

php - 查找字符串是否为 PHP 中的 MySQL 函数

php - 如何从它的 Slug 中获取 WooCommerce 产品 ID?

mysql - grails/hibernate 是否在 PostgreSQL 中存储以毫秒为单位的日期?

php - Doctrine 连接语法错误

php - Symfony2/Doctrine2 (MySQL) 更新后未立即显示在选择上

php - MySQL/phpmyadmin 配置问题

php - 在站点之间切换时保存表单数据

postgresql - 测试 JOOQ postgres jsonb 列是否存在键

postgresql - 为什么我看不到表的列名?

php - Symfony2 Doctrine2 - 根据原则 :mapping:import 从现有数据库生成一对多注释