web-dev-qa-db-ja.com

doctrine 2?で最後の挿入IDを取得します

doctrine 2 ORMで最後の挿入IDを取得するにはどうすればよいですか?これは教義のドキュメントでは見つかりませんでしたが、これは可能ですか?

69
tom

最後の挿入IDを取得するには、フラッシュ後にこれを使用する必要がありました。

$em->persist($user);
$em->flush();
$user->getId();
166
tom

エンティティマネージャのpersistメソッドを呼び出した後、IDにアクセスできます。

$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();

doこのIDを取得するには、フラッシュする必要があります。

構文エラーの修正:$ entityManager-> flush()が呼び出された後にセミコロンが追加されました。

36
clarkstachio

here のようにエンティティではなくネイティブSQLを使用している場合は、次に示すように最後に挿入されたIDを取得できます。

$entityManager->getConnection()->lastInsertId()

PostgreSQL などのシーケンスを持つデータベースの場合、lastInsertIdメソッドの最初のパラメーターとしてシーケンス名を指定できることに注意してください。

$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')

詳細については、GitHub here および here のコードをご覧ください。

26

Flush()を呼び出すと、多くの新しいエンティティが追加される可能性があるため、実際には「lastInsertId」という概念はありません。ただし、DoctrineはIDフィールドが生成されるたびにIDフィールドに入力します。したがって、flushを呼び出した後にidフィールドにアクセスすると、常に「永続的な」エンティティのIDが含まれます。

10
beberlei

質問に答えるのが少し遅れました。しかし、

MySQLデータベースの場合

$doctrine_record_object->idAUTO_INCREMENTは、データベースおよびテーブル定義で定義されます。

2
Purasapa