doctrine 2 ORMで最後の挿入IDを取得するにはどうすればよいですか? ドクトリンのドキュメントでこれを見つけられませんでした。これは可能ですか?
8 に答える
最後の挿入 ID を取得するには、フラッシュ後にこれを使用する必要がありました。
$em->persist($user);
$em->flush();
$user->getId();
エンティティ マネージャの persist メソッドと flush メソッドを呼び出した後、id にアクセスできます。
$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();
この ID を取得するには、flush を呼び出す必要があります。
ここに示すようにエンティティではなくネイティブ SQL を使用している場合は、次に示すように、最後に挿入された ID を取得することができます。
$entityManager->getConnection()->lastInsertId()
PostgreSQLなどのシーケンスを持つデータベースの場合、lastInsertId
メソッドの最初のパラメーターとしてシーケンス名を指定できることに注意してください。
$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')
flush() を呼び出すと、多くの新しいエンティティが追加される可能性があるため、実際には「lastInsertId」という概念はありません。ただし、Doctrine は ID フィールドが生成されるたびに入力するため、フラッシュを呼び出した後に id フィールドにアクセスすると、新しく「永続化された」エンティティの ID が常に含まれます。
質問への回答が少し遅くなりました。しかし、
MySQL データベースの場合
がデータベースとテーブル定義で定義されて$doctrine_record_object->id
いる場合に機能するはずです。AUTO_INCREMENT