我正在编写查询,我必须在Doctrine的表中发现最后插入项的ID。
我必须:
$this->getDoctrine()->getConnection()->prepare("SELECT MAX(id) FROM Commit");
答案 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();