Я использую Doctrine с базой данных postgres. Мои первичные ключи настроены как последовательности, например так:
/**
* @ORM\Entity()
*/
class Thing
{
/**
* @var int
* @ORM\Column(type="integer")
* @ORM\GeneratedValue()
* @ORM\Id()
*/
protected $id;
Я сохраняю новую сущность, подобную этой:
$thing = new Thing();
$em->persist($thing);
$em->flush();
Когда я делаю это, журнал запросов показывает, что доктрина вызывает SELECT NEXTVAL('thing_id_seq')
, чтобы сгенерировать идентификатор для новой сущности перед выполнением запроса INSERT
.
Если я вставлю 100 сущностей, он будет вызывать SELECT NEXTVAL('thing_id_seq')
100 раз. (Я знаю, что такие массовые вставки должны выполняться напрямую с помощью SQL, но вы меня поняли.)
Есть ли способ остановить Doctrine, выполняющего отдельный запрос для генерации идентификатора? (и затем запрос будет возвращен идентификатором INSERT
), или это просто так?
Я думаю, что postgres автоматически генерирует значения последовательности, что может усложнить некоторые вещи, мне просто интересно, возможно ли это / поддерживается.
PS: я не использую Symfony, но использовал его в прошлом, поэтому буду рад любым ответам на основе Symfony, которые я смогу исследовать.