Получить последний идентификатор вставки с доктриной 2? - PullRequest
68 голосов
/ 18 августа 2010

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

Ответы [ 5 ]

162 голосов
/ 18 августа 2010

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

$em->persist($user);
$em->flush();
$user->getId();
35 голосов
/ 20 августа 2010

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

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

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

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

25 голосов
/ 10 ноября 2014

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

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

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

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

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

10 голосов
/ 19 августа 2010

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

3 голосов
/ 15 декабря 2010

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

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

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

...