Получите последний идентификатор вставки с доктриной 2?


Как я могу получить идентификатор последней вставки с помощью доктрины 2 ORM? Я не нашел этого в документации доктрины, возможно ли это вообще?

Author: tom, 2010-08-18

5 answers

Мне пришлось использовать это после промывки, чтобы получить последний идентификатор вставки:

$em->persist($user);
$em->flush();
$user->getId();
 152
Author: tom, 2010-08-18 08:34:18

Вы можете получить доступ к идентификатору после вызова метода persist диспетчера сущностей.

$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();

Вам нужно смыть, чтобы получить этот идентификатор.

Исправлена синтаксическая ошибка: Добавлена точка с запятой после вызова $EntityManager->flush().

 32
Author: clarkstachio, 2015-11-09 11:25:22

Если вы используете не сущности, а собственный SQL, как показано здесь, то вам может потребоваться получить последний вставленный идентификатор, как показано ниже:

$entityManager->getConnection()->lastInsertId()

Для баз данных с последовательностями, такими как PostgreSQL обратите внимание, что вы можете указать имя последовательности в качестве первого параметра метода lastInsertId.

$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')

Для получения дополнительной информации взгляните на код на GitHub здесь и здесь.

 19
Author: Francesco Casula, 2018-04-24 14:51:57

Вызов flush() потенциально может добавить множество новых сущностей, поэтому на самом деле понятия "lastInsertId" не существует. Однако Доктрина будет заполнять поля идентификации всякий раз, когда они создаются, поэтому доступ к полю идентификатора после вызова flush всегда будет содержать идентификатор вновь "сохраненной" сущности.

 10
Author: beberlei, 2010-08-19 12:23:22

Немного поздно отвечать на вопрос. Но,

Если это база данных MySQL

Должно $doctrine_record_object->id работать, если AUTO_INCREMENT определено в базе данных и в определении вашей таблицы.

 3
Author: Purasapa, 2016-11-15 15:29:06