如何使用doctrine 2 ORM获取最后一个插入ID?我没有在学说的文献中找到这个,这甚至可能吗?
答案 0 :(得分:162)
我必须在刷新后使用它来获取最后一个插入ID:
$em->persist($user);
$em->flush();
$user->getId();
答案 1 :(得分:35)
您可以在调用实体管理器的persist方法后访问该标识。
$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();
你做需要刷新才能获得此ID。
语法错误修复:在$ entityManager-> flush()被调用后添加了分号。
答案 2 :(得分:24)
如果您没有使用实体,但显示的是here所示的原生SQL,那么您可能希望获得最后插入的ID,如下所示:
$entityManager->getConnection()->lastInsertId()
对于包含PostgreSQL等序列的数据库,请注意您可以提供序列名称作为lastInsertId
方法的第一个参数。
$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')
答案 3 :(得分:10)
调用flush()可能会添加许多新实体,因此实际上并没有“lastInsertId”的概念。但是,每当生成一个标识字段时,Doctrine都会填充标识字段,因此在调用flush之后访问id字段将始终包含新“持久”实体的ID。
答案 4 :(得分:3)
回答这个问题有点晚了。但是,
如果是MySQL数据库
如果在数据库和表定义中定义$doctrine_record_object->id
, AUTO_INCREMENT
应该有效。
答案 5 :(得分:0)
在我将自己推了一个工作日以找到此解决方案之后,我在这里发布了代码。
获取最后保存记录的功能:
private function getLastId($query) {
$conn = $this->getDoctrine()->getConnection();
$stmt = $conn->prepare($query);
$stmt->execute();
$lastId = $stmt->fetch()['id'];
return $lastId;
}
另一个调用上述函数的函数
private function clientNum() {
$lastId = $this->getLastId("SELECT id FROM client ORDER BY id DESC LIMIT 1");
$noClient = 'C' . sprintf("%06d", $lastId + 1); // C000002 if the last record ID is 1
return $noClient;
}
答案 6 :(得分:0)
更简单:SELECT max(id) FROM client