我正在使用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有一个自定义处理器。
如果有人有更好的方法来解决这个问题,或者可以指出我可以学习如何编码和配置自定义处理器的文档,我将很高兴。我找了很多地方,什么也没找到
1条答案
按热度按时间kcrjzv8t1#
在Laravel中没有对Firebird的原生支持。查看支持的DB引擎
不过,你似乎可以尝试使用专用的Firebase驱动程序,例如https://github.com/harrygulliford/laravel-firebird,以便在Laravel中使用Firebird数据库