在学说中插入一个计算字段


insert with a calculated field in doctrine

我想在doctrine中插入一个计算字段。如果我用SQL来做,它看起来像:

INSERT INTO "TableX" 
        (   "ID_Special", 
            "Name"
        )
VALUES  (   (select MAX(ID_Special) + 1 from "TableX"),
            "blabla"
        )

"ID_Special"应该是一个不唯一的autoc - 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语句?

或者有办法使我的第二种方法原子化吗?

到目前为止,我发现的最好的方法是:我创建了一个名为"IDSpecialGenerator"的表,其中只有一列类型为整数,pk,而不是null和autoinc。每次我想插入一个数据集到"TableX"与一个新的"ID_Special"我首先要做一个插入到"IDSpecialGenerator"。所以我的数据库进行计算,我没有多用户访问的问题,我不必使用本地SQL。