我想在学说中使用计算字段进行插入。如果我用SQL做它会看起来像:
INSERT INTO "TableX"
( "ID_Special",
"Name"
)
VALUES ( (select MAX(ID_Special) + 1 from "TableX"),
"blabla"
)
“ID_Special”应该是一个autoinc-Value,而不是唯一的。因此,在“TableX”上还有其他INSERT插入已存在的“ID_Special”。
现在我采取以下方式:
$qb = $em->createQueryBuilder();
$qb->select('MAX(r.ID_Special)')->from('TableX', 'r');
$nextIDSpecial = $qb->getQuery()->getSingleScalarResult();
...
$dataset = new TableX();
$dataset->setIDSpecial($nextIDSpecial);
$dataset->setName('blabla');
$em->persist($dataset);
$em->flush();
但如果我有多用户访问权限,这可能会遇到问题。
有没有办法用DQL创建第一个显示的SQL语句?
或者有没有办法让我的第二种方法atomar?
答案 0 :(得分:0)
我到目前为止找到的最好的方法:我创建了一个名为“IDSpecialGenerator”的表,只有一个类型为integer,pk,not null和autoinc的列。每次我想用新的“ID_Special”将数据集插入“TableX”时,我首先必须插入“IDSpecialGenerator”。所以我的数据库进行了计算,我对multiuseraccess没有任何问题,我不必使用原生SQL。