Doctrine2 Вставить и получить новый идентификатор вставки

В Doctrine2, используя что-то вроде:

$user = array('username' => 'example', 'passsword' => 'changeme'); $conn->insert('users', $user); 

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

 $id = //something here. $user = array('username' => 'example', 'passsword' => 'changeme', 'id' => $id); $conn->insert('users', $user); 

Solutions Collecting From Web of "Doctrine2 Вставить и получить новый идентификатор вставки"

Если вы используете ORM

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

если вы используете DBAL:

 $conn->lastInsertId(); 

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

Можно использовать метод Doctrine\DBAL\Connection::lastInsertId() .

Он может использоваться как с собственными запросами, так и с ручными вставками.

Пример:

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

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

 $connection = $em->getConnection(); 

Заметка:
Помимо технических деталей, я согласен с @Layke в использовании объекта для вашего конкретного случая.

Если вы хотите, чтобы ваша организация, которую вы пытаетесь установить,

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

Затем, когда вы сохраняете свой объект, диспетчер объектов заполнит объект, который вы пытаетесь сохранить с идентификатором.

Однако некоторые оговорки состоят в том, что вы не можете сделать это с помощью составных клавиш, очевидно, и вам, очевидно, нужно сбросить все сущности. Поэтому, если вы отсоединяете Entity, который имеет связь с сохраняемым объектом, к которому вы пытаетесь получить идентификатор, тогда вы не сможете получить идентификатор.

Кроме того, ответ Флакла звучит.

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

$conn->lastInsertId(); вы получите последний вставленный идентификатор, только используя DBAL Doctrine (без ORM).