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

tom*_*tom 70 php orm doctrine lastinsertid

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

tom*_*tom 167

我必须在刷新后使用它来获取最后一个插入ID:

$em->persist($user);
$em->flush();
$user->getId();
Run Code Online (Sandbox Code Playgroud)

  • 不能使用它.获取错误在"我的项目"中调用未定义的方法Test\Entity\Test :: getId() (2认同)

cla*_*hio 36

您可以在调用实体管理器的persist方法后访问该ID.

$widgetEntity = new WidgetEntity();
$entityManager->persist($widgetEntity);
$entityManager->flush();
$widgetEntity->getId();
Run Code Online (Sandbox Code Playgroud)

需要为了得到这个ID来冲洗.

语法错误修复:在$ entityManager-> flush()被调用后添加了分号.

  • 我确实需要刷新才能获得价值.持久是不够的,因为在您刷新之前,项目实际上并没有写入数据库. (6认同)

Fra*_*ula 26

如果如图所示使用的不是实体,而是本地SQL 这里,那么你可能想获得最后插入的ID,如下图所示:

$entityManager->getConnection()->lastInsertId()
Run Code Online (Sandbox Code Playgroud)

对于包含PostgreSQL等序列的数据库,请注意您可以提供序列名称作为方法的第一个参数lastInsertId.

$entityManager->getConnection()->lastInsertId($seqName = 'my_sequence')
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请在此处此处查看 GitHub上的代码.

  • @ paul.ago你只需要知道序列的名称,例如:`lastInsertId('articles_id_seq')` (4认同)
  • 您还可以像这样获取序列的名称: `$conn = $this->getDoctrine()->getConnection();` $metadata = $em->getClassMetadata('\App\Entity\YourClass'); ` `$seqName = $metadata->getSequenceName($conn->getDatabasePlatform());` 有效:-) (2认同)

beb*_*lei 10

调用flush()可能会添加许多新实体,因此实际上并没有"lastInsertId"的概念.但是,每当生成一个身份字段时,Doctrine都会填充身份字段,因此在调用flush之后访问id字段将始终包含新"持久"实体的ID.