Как я могу получить последний идентификатор вставки с доктриной 2 ORM? Я не нашел этого в документации доктрины, разве это возможно?Получите последний идентификатор вставки с доктриной 2?
ответ
я должен был использовать это после промывки, чтобы получить последний вставки ID:
$em->persist($user);
$em->flush();
$user->getId();
Не могу использовать его. Получение ошибки Вызов неопределенного метода Test \ Entity \ Test :: getId() в «Мой проект» –
@ noobie-php Вам нужно определить публичный получатель для вашего Идентификатора (если он является приватным, как и должно быть) – cheesemacfly
@cheesemacfly : Я уже разобрал это, эта ошибка генерируется (в моем сценарии), когда мы не можем выполнить флеш() по какой-либо причине, как только Flush() будет успешно запущен getID() начнет работать, предполагая, что getter и seters здесь не проблема –
Calling заподлицо() потенциально может добавить много новых объектов, поэтому там не на самом деле понятие «lastInsertId». Однако Doctrine будет заполнять поля идентификатора всякий раз, когда будет сгенерирован, поэтому доступ к полю id после вызова flush всегда будет содержать идентификатор вновь «сохраненного» объекта.
Вы можете получить доступ к id после вызова метода persist менеджера сущностей.
$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();
Вы сделать необходимости вымывать для того, чтобы получить этот идентификатор.
Исправление ошибки синтаксиса: добавлена точка с запятой после вызова $ entityManager-> flush().
Мне нужно было сбросить, чтобы вернуть значение. Сохранять было недостаточно, поскольку элементы фактически не записываются в базу данных до тех пор, пока вы не начнете флеш. –
Немного поздно ответить на вопрос. Но,
Если это база данных, MySQL
должен $doctrine_record_object->id
работать, если AUTO_INCREMENT
определен в базе данных и в вашем определении таблицы.
Если вы не используете объекты, но Native SQL, как показано here, то вы можете получить последний вставленный идентификатор, как показано ниже:
$entityManager->getConnection()->lastInsertId()
Для баз данных с последовательностями, такими как PostgreSQL пожалуйста, не то, что вы можете укажите имя последовательности в качестве первого параметра метода lastInsertId
.
$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')
Для получения дополнительной информации посмотрите на код на GitHub here и here.
Это может не работать с каждой СУБД. Например, он не работает с Postgres (из-за последовательностей) –
Awesome !! Я часами искал этот маленький фрагмент. – MikeGA
@ paul.ago Вам просто нужно знать имя последовательности, например: 'lastInsertId ('articles_id_seq')' – ChocoDeveloper
попробуйте это, в конце вашей вставки верните id ... как return $ this-> id; – Manie