クエリを書いていますが、Doctrine を使用して、テーブルに最後に挿入されたアイテムの ID を検出する必要があります。
そうしなければならなかった:
$this->getDoctrine()->getConnection()->prepare("SELECT MAX(id) FROM Commit");
クエリを書いていますが、Doctrine を使用して、テーブルに最後に挿入されたアイテムの ID を検出する必要があります。
そうしなければならなかった:
$this->getDoctrine()->getConnection()->prepare("SELECT MAX(id) FROM Commit");
フラッシュすると、DoctrineはエンティティIDをエンティティに割り当てます。あなたのエンティティが次のようになっているとしましょう:
class MyEntity {
protectd $id;
public function getId() {
return $this->id;
}
public function setId($id) {
$this->id = $id;
}
}
EntityManager :: flush()を実行すると、最後に挿入されたIDが$idプロパティに割り当てられます。次に、$ myEntity-> getId()を実行して、最後に挿入されたIDを取得します。
Doctrine にはそれを行う方法がありません。フラッシュを使用すると、最近挿入された場合にのみ機能し、それを挿入したユーザーに対してのみ機能します。ただし、そのテーブルが大きいなどの理由でそのテーブルにクエリを実行したくない場合は、その ID を格納する別のテーブルを作成し、ユーザーがそのテーブルに新しい要素を追加するたびに更新することができます。やりたくないなら、言われたことをしなければならない。
Cerad が述べているように、別のクエリを実行してエンティティ ID を取得するべきではありません。代わりに、エンティティ マネージャーに、挿入時に取得した識別子をエンティティに入力 (更新) させることができます。例は..
$myEntity = new \Entities\MyEntity();
$myEntity->setProperty($someValue);
// Save my entity ($em = EntityManager)
$em->persist($myEntity);
// Flush my entity manager
try {
$em->flush();
} catch (\Exception $e)
{
}
// Refresh my entity (populate the identifier)
$em->refresh($myEntity);
// Tada
echo $myEntity->getId();