Doctrine2 insérer et récupérer un nouvel ID d'insertion

Dans Doctrine2 en utilisant quelque chose comme:

$user = array('username' => 'example', 'passsword' => 'changeme');

$conn->insert('users', $user);

Comment puis-je obtenir le dernier ID de l'utilisateur que je viens d'insérer? S'il n'est pas possible de le faire, comment générez-vous un id afin que vous puissiez ce qui suit:

$id = //something here.
$user = array('username' => 'example', 'passsword' => 'changeme', 'id' => $id);
$conn->insert('users', $user);
39
demandé sur mu is too short 2011-08-24 13:07:04

4 réponses

Si vous utilisez L'ORM

$em->persist($object);
$em->flush();
$object->getId();

Si vous utilisez le DBAL:

$conn->lastInsertId();

Http://www.doctrine-project.org/api/dbal/2.5/class-Doctrine.DBAL.Connection.html#_lastInsertId

101
répondu Flask 2016-08-31 18:08:56

On peut utiliser la méthode Doctrine\DBAL\Connection::lastInsertId().

Il peut être utilisé avec des requêtes natives ainsi que des insertions écrites manuellement.

Exemple de cas:

$query = 'INSERT INTO blabla...';
$connection->executeUpdate($query, $params);

var_dump($connection->lastInsertId());

Si vous utilisez L'ORM, vous pouvez obtenir une instance de la connexion auprès du gestionnaire d'entités:

$connection = $em->getConnection();

Remarque:
Mis à part les détails techniques, je suis d'accord avec @Layke pour utiliser une entité pour votre cas spécifique.

5
répondu Nikola Petkanski 2013-06-07 12:00:38

À condition que votre entité que vous essayez de définir ait

   /**
     * @Id @Column(type="integer")
     * @GeneratedValue
     */
    private $id;

Ensuite, lorsque vous persistez votre objet, le gestionnaire d'entités remplira l'entité que vous essayez de conserver avec L'ID.

Quelques mises en garde cependant, est que vous ne pouvez pas le faire avec les clés composites post évidemment, et vous devez évidemment vider toutes les entités. Donc, si vous détachez une entité qui a une association à l'entité persistante pour laquelle vous essayez d'obtenir L'ID, vous ne pourrez pas récupérer L'ID.

En dehors de la réponse de ce flacon est bang on.

$em->persist($object);
$em->flush();
$object->getId();
1
répondu Layke 2013-06-26 14:12:07

$conn->lastInsertId();Vous obtiendrez le dernier ID inséré lorsque vous utilisez uniquement le DBAL de Doctrine (sans ORM).

0
répondu Bramus 2013-02-17 15:23:25