查询生成器 lastInsertId()

QueryBuilder lastInsertId()

我想要条目的最后一个 UID。对于 mysql,它是 "insertId()"。这在 Extbase 是如何运作的?

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table);
$queryBuilder
   ->insert($table)
   ->values([
       'test_id'          => 1,
       'test2_id'         => 2,
   ]);

$queryBuilder->execute();

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table2);
$queryBuilder
   ->insert($table2)
   ->values([
       'uid_local'         => ?, // uid from $table
       'uid_foreign'       => 1
   ]);
$queryBuilder->execute();

我有点不确定在使用 QueryBuilder 插入新记录时它是否可用,但是 TYPO3 文档中的迁移指南解释了如何在新的 Doctrine 数据库层中迁移 sql_insert_id() 方法

https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/Database/Migration/Index.html#sql-insert-id

提示:

(int)$databaseConnectionForPages->lastInsertId('pages');

您可以通过 $queryBuilder->getConnection()->lastInsertId();

获取最后插入的 ID

这样就可以了:

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table);
$queryBuilder
   ->insert($table)
   ->values([
       'test_id'          => 1,
       'test2_id'         => 2,
   ]);

$queryBuilder->execute();
$tableUid = $queryBuilder->getConnection()->lastInsertId();

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($table2);
$queryBuilder
   ->insert($table2)
   ->values([
       'uid_local'         => $tableUid,
       'uid_foreign'       => 1
   ]);
$queryBuilder->execute();