Doctrine在执行前修改查询

时间:2016-11-23 05:31:27

标签: php mysql symfony doctrine-orm

我的网站使用pdo_mysql作为Doctrine驱动程序与数据库进行通信,一切都很好。

现在我尝试使用sqlite作为数据库驱动程序为我的存储库和类编写功能单元测试。但是我的一个查询使用USE INDEX(index),看起来sqlite不喜欢这种语法。

有没有办法修改所有查询,以便在查询进入USE INDEX(...)执行之前从查询中删除sqlite字符串?

1 个答案:

答案 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'
];

并且在执行之前更改所有查询