我的网站使用pdo_mysql
作为Doctrine驱动程序与数据库进行通信,一切都很好。
现在我尝试使用sqlite
作为数据库驱动程序为我的存储库和类编写功能单元测试。但是我的一个查询使用USE INDEX(index)
,看起来sqlite
不喜欢这种语法。
有没有办法修改所有查询,以便在查询进入USE INDEX(...)
执行之前从查询中删除sqlite
字符串?
答案 0 :(得分:0)
所以我想我可以回答我自己的问题。
我创建了一个自定义Connection类,从默认的Connection扩展,并覆盖executeQuery()
函数
class TestConnection extends Connection {
public function executeQuery($query, array $params = array(), $types = array(), QueryCacheProfile $qcp = null)
{
$query1 = preg_replace('/USE INDEX\(\S+\)/', '', $query);
return parent::executeQuery($query1, $params, $types, $qcp);
}
}
然后定义参数以创建像这样的
的sqlite连接 private $dbParams = [
'driver' => 'pdo_sqlite',
'memory' => true,
'wrapperClass' => 'Sg\Test\Database\TestConnection'
];
并且在执行之前更改所有查询