вставить с вычисленным полем в доктрине - PullRequest
0 голосов
/ 21 декабря 2011

Я хочу сделать вставку с вычисляемым полем в учении.Если бы я делал это с SQL, это выглядело бы так:

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

«ID_Special» должен быть значением autoinc-Value, не будучи уникальным.Так что есть другие INSERT, сделанные на «TableX», которые вставляют уже существующий «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();

Но это может столкнуться с проблемами, еслиУ меня есть многопользовательский доступ.

Есть ли способ создать первый показанный SQL-оператор с помощью DQL?

Или есть способ сделать мой второй подход атомарным?

1 Ответ

0 голосов
/ 21 декабря 2011

Лучший способ, который я нашел до сих пор: я создал таблицу с именем «IDSpecialGenerator» только с одним столбцом типа integer, pk, not null и autoinc. Каждый раз, когда я хочу вставить набор данных в «TableX» с новым «ID_Special», я сначала должен сделать вставку в «IDSpecialGenerator». Итак, моя база данных выполняет вычисления, у меня нет проблем с многократным использованием, и мне не нужно использовать собственный SQL.

...