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);
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
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.
À 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();
$conn->lastInsertId();
Vous obtiendrez le dernier ID inséré lorsque vous utilisez uniquement le DBAL de Doctrine (sans ORM).