web-dev-qa-db-fra.com

Obtenez le dernier identifiant d'insertion avec doctrine 2?

Comment puis-je obtenir le dernier identifiant d'insertion avec doctrine 2 ORM? Je ne l'ai pas trouvé dans la documentation de la doctrine, est-ce même possible?).

69
tom

Je devais l'utiliser après la couleur pour obtenir le dernier identifiant d'insertion:

$em->persist($user);
$em->flush();
$user->getId();
166
tom

Vous pouvez accéder à l'ID après avoir appelé la méthode de persistance du gestionnaire d'entités.

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

Vous faites devez vider pour obtenir cet identifiant.

Erreur de syntaxe Correction: Le point-virgule ajouté après que $ entityManager-> flush () a été appelé.

36
clarkstachio

Si vous n'utilisez pas d'entités mais du SQL natif comme indiqué ici , vous souhaiterez peut-être obtenir le dernier identifiant inséré, comme indiqué ci-dessous:

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

Pour les bases de données avec des séquences telles que PostgreSQL , notez que vous pouvez indiquer le nom de la séquence comme premier paramètre de la méthode lastInsertId.

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

Pour plus d'informations, consultez le code sur GitHub ici et ici .

26
Francesco Casula

L'appel de flush () peut potentiellement ajouter beaucoup de nouvelles entités, il n'y a donc pas vraiment la notion de "lastInsertId". Toutefois, Doctrine renseignera les champs d’identité à chaque fois qu’un champ sera généré. Par conséquent, si vous accédez au champ id après le vidage de l’appel, celui-ci contiendra toujours l’ID d’une entité "persistante".

10
beberlei

Un peu tard pour répondre à la question. Mais,

Si c'est une base de données MySQL

devrait $doctrine_record_object->id fonctionne si AUTO_INCREMENT est défini dans la base de données et dans la définition de votre table.

2
Purasapa