Doctrine2 Вставить и получить новый идентификатор вставки - PullRequest
45 голосов
/ 24 августа 2011

В 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);

Ответы [ 4 ]

112 голосов
/ 24 августа 2011

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

5 голосов
/ 07 июня 2013

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

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

Пример дела:

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

var_dump($connection->lastInsertId());

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

$connection = $em->getConnection();

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

1 голос
/ 24 августа 2011

При условии, что ваша сущность, которую вы пытаетесь установить, имеет

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

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

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

Помимо этого ответа Фляски - удар.

$em->persist($object);
$em->flush();
$object->getId();
0 голосов
/ 17 февраля 2013

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

...