Laravel funtion lastInsertID is not supported by PDO driver - Hack The Tech - Latest News related to Computer and Technology

Hack The Tech - Latest News related to Computer and Technology

Get Daily Latest News related to Computer and Technology and hack the world.

Thursday, May 18, 2023

Laravel funtion lastInsertID is not supported by PDO driver

I am using Firebird and having the following error:

SQLSTATE[IM001]: Driver does not support this function: driver does not support lastInsertId()

I dig a bit on Laravel sources, and found this piece:

public function processInsertGetId(Builder $query, $sql, $values, $sequence = null)
{
    $query->getConnection()->insert($sql, $values);

    $id = $query->getConnection()->getPdo()->lastInsertId($sequence);

    return is_numeric($id) ? (int) $id : $id;

}

I wish to modify the approach to use "INSERT INTO TableName (Field1, Field2) values (Value1, Value2) RETURNING ID" that is the way to get the "last insert id" on Firebird

I dig a little more and found vendor/laravel/framework/src/Illuminate/Query/Processors/PostgresProcessor.php and saw it has a custom implementation for the same function

public function processInsertGetId(Builder $query, $sql, $values, $sequence = null)
{
    $connection = $query->getConnection();

    $connection->recordsHaveBeenModified();

    $result = $connection->selectFromWriteConnection($sql, $values)[0];

    $sequence = $sequence ?: 'id';

    $id = is_object($result) ? $result->{$sequence} : $result[$sequence];

    return is_numeric($id) ? (int) $id : $id;
}

I could not find documentation and samples on how to write custom Processors, I tried to duplicate the Postgres code on another file, searched for other files that references it and made a mimic for Firebird, but without success, I could not find even how to tell that Firebird has a custom processor.

I will be glad if someone has a better approach to solve the problem, or could point me out the documentation where I can learn how to code and configure a custom processor. I have searched a lot and found nothing



source https://stackoverflow.com/questions/76275191/laravel-funtion-lastinsertid-is-not-supported-by-pdo-driver

No comments:

Post a Comment