我在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替换自动增量
如果存在,请提出最佳解决方案
答案 0 :(得分:1)
查看您的实体类,我认为声明不完整,无法为序列表中的id设置自动值。请尝试使用此声明。对我有用
/**
* @ORM\Id()
* @ORM\Column(type="integer", options={"default"="nextval('property_id_seq'::regclass)"})
* @ORM\GeneratedValue(strategy="SEQUENCE")
*/
private $id;
删除现有表并从bin / console更新架构