2013-01-02 27 views
2

當我們用CDbCacheDependency定義緩存依賴項時,我們必須提供一個SQL作爲依賴項。當我們使用CDbCriteria時,它不可能提供sql,因爲sql是通過具有適當參數令牌的critera構建的。Yii ::如何將CDbCriteria用作緩存依賴項

有什麼辦法可以使用CDbCriteria作爲緩存依賴嗎?問這樣的事情是否正確?因爲我只對正在由CDbCriteria構建的sql感興趣,其他我將不得不手動構建sql,我認爲這是不對的。

謝謝

+0

你能給出一個樣本標準嗎? –

+0

有沒有直接的方法,但你可以間接使用CDbCriteria,正如我在下面的回答中提到 –

回答

3

由於Yii的1.1.13的,我怕你會使用一個SQL語句,有使用CDbCriteria沒有直接的方法。

然而有使用CDbCriteria間接方式,但最終你將不得不使用它來生成SQL命令,該命令會通過爲您的依賴。該技術使用CDbCommandBuilder及其方法。

樣品(見諒解評論):

$criteria=new CDbCriteria; 
// ... replace with code to set up your criteria ... 
// ... 
// first create commandBuilder instance 
$commandBuilder = new CDbCommandBuilder(Yii::app()->db->schema); 
// then create command using criteria 
$command = $commandBuilder->createFindCommand('table_name', $criteria); 
// then get sql statement text 
$sql = $command->text; 
// then set your dependency 
$dependency = new CDbCacheDependency($sql); 
// if you have params in the criteria, set the params for dependency 
$dependency->params = $criteria->params; 

// now your dependency is usable 

在上面我用createFindCommand,還有其他的方法,比如在CDbCommandBuildercreateCountCommand,使用一個產生,你要的sql語句跑。


另外,您也可以使用Query Builder,當然不會有任何CDbCriteria那裏。

+1

Thanks @ bool.dev,儘管它需要版本升級,但它的工作。謝謝。 – Arfeen

+1

沒問題。但版本升級?你的意思是1.1.13?我的意思是,直到1.1.13這種情況才發生(我不知道未來版本會發生什麼),所以即使你使用的是舊版本,只要方法可用,它也應該工作,但是當然我不能確定。儘管我在1.1.10及更高版本上測試了這個,但我認爲所有使用的類都在1.0以後,所以它應該也適用於舊版本。但自從1.1.6開始,CDbCacheDependency的'params'已經存在了,所以你可以說__this適用於所有版本> = 1.1.6__。 –

+0

哦,其實我以爲它只會在1.1.13中使用,這就是爲什麼我下載它。我將確保它在1.1.11中正常工作。 – Arfeen