Allow getting the last insert id without much hassle
This commit is contained in:
parent
736e133c04
commit
f2c7acb3c0
|
@ -1023,6 +1023,21 @@ class QueryBuilder implements IQueryBuilder {
|
|||
return new QueryFunction($call);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to get the id of the last inserted element
|
||||
* @return int
|
||||
* @throws \BadMethodCallException When being called before an insert query has been run.
|
||||
*/
|
||||
public function getLastInsertId() {
|
||||
$from = $this->getQueryPart('from');
|
||||
|
||||
if ($this->getType() === \Doctrine\DBAL\Query\QueryBuilder::INSERT && !empty($from)) {
|
||||
return (int) $this->connection->lastInsertId($from['table']);
|
||||
}
|
||||
|
||||
throw new \BadMethodCallException('Invalid call to getLastInsertId without using insert() before.');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $table
|
||||
* @return string
|
||||
|
|
|
@ -796,4 +796,12 @@ interface IQueryBuilder {
|
|||
* @since 8.2.0
|
||||
*/
|
||||
public function createFunction($call);
|
||||
|
||||
/**
|
||||
* Used to get the id of the last inserted element
|
||||
* @return int
|
||||
* @throws \BadMethodCallException When being called before an insert query has been run.
|
||||
* @since 9.0.0
|
||||
*/
|
||||
public function getLastInsertId();
|
||||
}
|
||||
|
|
|
@ -1086,6 +1086,31 @@ class QueryBuilderTest extends \Test\TestCase {
|
|||
);
|
||||
}
|
||||
|
||||
public function testGetLastInsertId() {
|
||||
$qB = $this->connection->getQueryBuilder();
|
||||
|
||||
try {
|
||||
$qB->getLastInsertId();
|
||||
$this->fail('getLastInsertId() should throw an exception, when being called before insert()');
|
||||
} catch (\BadMethodCallException $e) {
|
||||
$this->assertTrue(true);
|
||||
}
|
||||
|
||||
$qB->insert('appconfig')
|
||||
->values([
|
||||
'appid' => $qB->expr()->literal('testFirstResult'),
|
||||
'configkey' => $qB->expr()->literal('testing' . 50),
|
||||
'configvalue' => $qB->expr()->literal(100 - 50),
|
||||
])
|
||||
->execute();
|
||||
|
||||
$actual = $qB->getLastInsertId();
|
||||
|
||||
$this->assertNotNull($actual);
|
||||
$this->assertInternalType('int', $actual);
|
||||
$this->assertEquals($this->connection->lastInsertId('*PREFIX*appconfig'), $actual);
|
||||
}
|
||||
|
||||
public function dataGetTableName() {
|
||||
return [
|
||||
['*PREFIX*table', null, '`*PREFIX*table`'],
|
||||
|
|
Loading…
Reference in New Issue