Подтвердить что ты не робот

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);
4b9b3361

Ответ 2

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

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

Пример:

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

var_dump($connection->lastInsertId());

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

$connection = $em->getConnection();

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

Ответ 3

Обеспечение того, что ваш объект, который вы пытаетесь установить, имеет

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

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

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

Кроме того, ответ на флэшку звучит.

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

Ответ 4

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