0

クエリを書いていますが、Doctrine を使用して、テーブルに最後に挿入されたアイテムの ID を検出する必要があります。

そうしなければならなかった:

$this->getDoctrine()->getConnection()->prepare("SELECT MAX(id) FROM Commit");
4

3 に答える 3

0

フラッシュすると、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を取得します。

于 2012-05-01T06:04:39.897 に答える
0

Doctrine にはそれを行う方法がありません。フラッシュを使用すると、最近挿入された場合にのみ機能し、それを挿入したユーザーに対してのみ機能します。ただし、そのテーブルが大きいなどの理由でそのテーブルにクエリを実行したくない場合は、その ID を格納する別のテーブルを作成し、ユーザーがそのテーブルに新しい要素を追加するたびに更新することができます。やりたくないなら、言われたことをしなければならない。

于 2012-05-01T06:58:09.633 に答える
0

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();
于 2012-05-01T11:56:08.867 に答える