В 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);
Если вы используете 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).