我如何获得带有准则2 ORM的最后一个插入ID?我在学说的文档中没有找到,这甚至可能吗?
Answers:
我必须在刷新后使用此函数来获取最后的插入ID:
$em->persist($user);
$em->flush();
$user->getId();
persist()
将实体循环,flush()
之后又该怎么办?我正在设法弄清楚,但到目前为止还没有运气。
code
$ id = $ user-> getId(); code
如果您不使用实体,而是使用Native SQL(如此处所示),则可能需要获取最后插入的id,如下所示:
$entityManager->getConnection()->lastInsertId()
对于具有序列的数据库(例如PostgreSQL),请注意,您可以提供序列名称作为方法的第一个参数lastInsertId
。
$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')
lastInsertId('articles_id_seq')
$conn = $this->getDoctrine()->getConnection();
$metadata = $em->getClassMetadata('\App\Entity\YourClass');
$seqName = $metadata->getSequenceName($conn->getDatabasePlatform());
Works :-)
在我将自己推了一个工作日以找到此解决方案之后,我在这里发布了代码。
获取最后保存的记录的功能:
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;
}
更简单: SELECT max(id) FROM client