2

CDbCacheDependencyを使用してキャッシュの依存関係を定義する場合、依存関係としてSQLを提供する必要があります。CDbCriteriaを使用している場合、SQLは適切なパラメータトークンを使用してcriteraを介して構築されるため、SQLを提供することはできません。

CDbCriteriaをキャッシュの依存関係として使用する方法はありますか?そんなことを聞​​くのは正しいですか?私はCDbCriteriaによって構築されているSQLにのみ関心があるので、他の場合は手動でSQLを構築する必要があり、それは正しくないと思います。

ありがとうございました

4

1 に答える 1

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、のような他のメソッドがあります、あなたが実行しなければならないsqlステートメントを生成するものを使用してください。createCountCommandCDbCommandBuilder


または、 Query Builderを使用することもできますが、もちろんそこにはありませんCDbCriteria

于 2013-01-03T00:43:32.730 に答える