Doctrine2:发现表的最后一个ID?

时间:2012-04-30 21:19:02

标签: php symfony doctrine-orm

我正在编写查询,我必须在Doctrine的表中发现最后插入项的ID。

我必须:

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

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

Doctrine没有任何方法可以做到这一点,只有在最近插入时才使用flush,并且仅适用于插入它的用户。但是如果你不想查询那个表因为它很大或是因为其它东西,你可以创建另一个表来存储该id,并且每次有些用户向该表添加一个新元素时都要更新它。如果你不想这样做,那你就必须这样做。

答案 2 :(得分: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();