81

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

4

8 に答える 8

184

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

$em->persist($user);
$em->flush();
$user->getId();
于 2010-08-18T08:34:18.497 に答える
43

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

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

この ID を取得するには、flush を呼び出す必要があります。

于 2010-08-20T10:03:10.913 に答える
30

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

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

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

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

詳細については、こちらこちらの GitHub のコードをご覧ください。

于 2014-11-10T16:24:36.833 に答える
10

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

于 2010-08-19T12:23:22.263 に答える
2

質問への回答が少し遅くなりました。しかし、

MySQL データベースの場合

がデータベースとテーブル定義で定義されて$doctrine_record_object->idいる場合に機能するはずです。AUTO_INCREMENT

于 2010-12-15T12:53:13.983 に答える