當我們用CDbCacheDependency定義緩存依賴項時,我們必須提供一個SQL作爲依賴項。當我們使用CDbCriteria時,它不可能提供sql,因爲sql是通過具有適當參數令牌的critera構建的。Yii ::如何將CDbCriteria用作緩存依賴項
有什麼辦法可以使用CDbCriteria作爲緩存依賴嗎?問這樣的事情是否正確?因爲我只對正在由CDbCriteria構建的sql感興趣,其他我將不得不手動構建sql,我認爲這是不對的。
謝謝
當我們用CDbCacheDependency定義緩存依賴項時,我們必須提供一個SQL作爲依賴項。當我們使用CDbCriteria時,它不可能提供sql,因爲sql是通過具有適當參數令牌的critera構建的。Yii ::如何將CDbCriteria用作緩存依賴項
有什麼辦法可以使用CDbCriteria作爲緩存依賴嗎?問這樣的事情是否正確?因爲我只對正在由CDbCriteria構建的sql感興趣,其他我將不得不手動構建sql,我認爲這是不對的。
謝謝
由於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
,還有其他的方法,比如在CDbCommandBuilder
createCountCommand
,使用一個產生,你要的sql語句跑。
另外,您也可以使用Query Builder,當然不會有任何CDbCriteria
那裏。
Thanks @ bool.dev,儘管它需要版本升級,但它的工作。謝謝。 – Arfeen
沒問題。但版本升級?你的意思是1.1.13?我的意思是,直到1.1.13這種情況才發生(我不知道未來版本會發生什麼),所以即使你使用的是舊版本,只要方法可用,它也應該工作,但是當然我不能確定。儘管我在1.1.10及更高版本上測試了這個,但我認爲所有使用的類都在1.0以後,所以它應該也適用於舊版本。但自從1.1.6開始,CDbCacheDependency的'params'已經存在了,所以你可以說__this適用於所有版本> = 1.1.6__。 –
哦,其實我以爲它只會在1.1.13中使用,這就是爲什麼我下載它。我將確保它在1.1.11中正常工作。 – Arfeen
你能給出一個樣本標準嗎? –
有沒有直接的方法,但你可以間接使用CDbCriteria,正如我在下面的回答中提到 –