PDO驱动程序不支持Laravel函数lastInsertID

ddrv8njm  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(203)

我正在使用Firebird,遇到以下错误:
SQLSTATE[IM001]:驱动程序不支持此功能:驱动程序不支持lastInsertId()
我在Laravel的源代码上挖了一点,发现了这篇文章:

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;

}

我希望修改方法以使用“INSERT INTO TableName(Field1,Field2)values(Value1,Value2)RETURNING ID”,这是在Firebird上获取“last insert id”的方法
我进一步挖掘,找到了vendor/laravel/framework/src/Illuminate/Query/Processors/PostgresProcessor.php,发现它有相同函数的自定义实现

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;
}

我找不到关于如何编写自定义处理器的文档和示例,我试图在另一个文件上复制Postgres代码,搜索引用它的其他文件并模仿Firebird,但没有成功,我甚至找不到如何告诉Firebird有一个自定义处理器。
如果有人有更好的方法来解决这个问题,或者可以指出我可以学习如何编码和配置自定义处理器的文档,我将很高兴。我找了很多地方,什么也没找到

kcrjzv8t

kcrjzv8t1#

在Laravel中没有对Firebird的原生支持。查看支持的DB引擎
不过,你似乎可以尝试使用专用的Firebase驱动程序,例如https://github.com/harrygulliford/laravel-firebird,以便在Laravel中使用Firebird数据库

相关问题