QueryBuilder lastInsertId () - PullRequest
       13

QueryBuilder lastInsertId ()

0 голосов
/ 03 апреля 2019

Я хотел бы получить последний 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();

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Вы можете получить последний идентификатор вставки с помощью $queryBuilder->getConnection()->lastInsertId();

Так что получится:

$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();
0 голосов
/ 03 апреля 2019

Я немного не уверен, доступно ли это при использовании QueryBuilder для вставки новых записей, но руководство по миграции в Документах TYPO3 объясняет, как вы переносите метод sql_insert_id () в новый слой базы данных Doctrine

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

Совет:

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

...