2016-11-23 53 views
0

我有一個使用pdo_mysql作爲Doctrine驅動程序與數據庫通信的網站,一切正常。Doctrine在執行前修改查詢

現在我正在嘗試使用sqlite作爲數據庫驅動程序爲我的存儲庫和類編寫功能單元測試。然而,我的一個查詢使用USE INDEX(index),它看起來像sqlite不喜歡那種語法。

有沒有辦法修改所有查詢,從查詢中刪除USE INDEX(...)字符串,然後再執行sqlite

+0

發現此https://gist.github.com/arnaud-lb/2704404(您必須改變它) – Vamsi

+0

你的目的是爲了在查詢中添加索引助手,我想在已經使用索引助手 – lightbringer

+0

是的現有查詢中'sqlite'通用地移除它,但是鏈接只是爲了你可以採用的方法,創建自定義漫遊者 – Vamsi

回答

0

所以我想我可以回答我自己的問題。

我創建一個自定義連接類,從默認的連接延伸,覆蓋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); 
    } 
} 

然後定義參數來創建這樣

private $dbParams = [ 
    'driver' => 'pdo_sqlite', 
    'memory' => true, 
    'wrapperClass' => 'Sg\Test\Database\TestConnection' 
]; 

sqlite的連接,所有查詢都在執行前更改