获取doctrine 2的最后一个插入ID?

时间:2010-08-18 06:01:05

标签: php orm doctrine lastinsertid

如何使用doctrine 2 ORM获取最后一个插入ID?我没有在学说的文献中找到这个,这甚至可能吗?

7 个答案:

答案 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')

有关详细信息,请查看GitHub herehere上的代码。

答案 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