如何使用学说 2 ORM 获取最后一个插入 ID?我在教义文档中没有找到这一点,这甚至可能吗?
问问题
110490 次
8 回答
184
我必须在刷新后使用它来获取最后一个插入 ID:
$em->persist($user);
$em->flush();
$user->getId();
于 2010-08-18T08:34:18.497 回答
43
调用实体管理器的persist和flush方法后可以访问id。
$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();
您必须调用 flush 才能获得此 ID。
于 2010-08-20T10:03:10.913 回答
30
如果您不使用实体,而是使用 Native SQL,如此处所示,那么您可能希望获取最后插入的 id,如下所示:
$entityManager->getConnection()->lastInsertId()
对于PostgreSQL等具有序列的数据库,请注意您可以提供序列名称作为lastInsertId
方法的第一个参数。
$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')
有关更多信息,请查看此处和此处的 GitHub 上的代码。
于 2014-11-10T16:24:36.833 回答
10
调用 flush() 可能会添加许多新实体,因此实际上并没有“lastInsertId”的概念。然而,Doctrine 将在生成身份字段时填充身份字段,因此在调用刷新后访问 id 字段将始终包含新“持久”实体的 ID。
于 2010-08-19T12:23:22.263 回答
2
回答这个问题有点晚了。但,
如果是 MySQL 数据库
如果在数据库和表定义中定义应该可以$doctrine_record_object->id
工作。AUTO_INCREMENT
于 2010-12-15T12:53:13.983 回答
1
就我而言,当我将 $id 声明为私有时,我刚刚创建了一个新的公共方法来获取它。
public function getId() {
return $this->id;
}
所以我可以这样称呼它
$user = new User();
$user->setUsername("Kylo Ren");
$entityManager = getEntityManager();
$entityManager->persist($user);
$entityManager->flush();
echo "Created User with ID " . $user->getId() . "\n";
于 2021-08-22T14:50:08.783 回答
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;
}
于 2019-11-15T15:24:18.460 回答
0
更简单:SELECT max(id) FROM client
于 2020-05-05T15:05:20.907 回答