在学说中插入计算字段

时间:2011-12-21 08:58:52

标签: php sql doctrine doctrine-orm

我想在学说中使用计算字段进行插入。如果我用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?

1 个答案:

答案 0 :(得分:0)

我到目前为止找到的最好的方法:我创建了一个名为“IDSpecialGenerator”的表,只有一个类型为integer,pk,not null和autoinc的列。每次我想用新的“ID_Special”将数据集插入“TableX”时,我首先必须插入“IDSpecialGenerator”。所以我的数据库进行了计算,我对multiuseraccess没有任何问题,我不必使用原生SQL。