Ответ 1
Если вы используете 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
В 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();
предоставит вам последний вставленный идентификатор, когда используется только Doctrine DBAL (без ORM).