更新:あなたは実際に(この回答の下のコメントから)部分的な一致を探しているようです、そしてそのためにあなたはtrue
あなたのcompare
呼び出しに渡す必要があります:
$criteria->compare("A.field1", "test", true, 'OR');
それでも:に渡すことができますaddCondition
:
$criteria->addCondition('A.field1 LIKE "%test"','OR');
// or with params as below
$criteria->addCondition('A.field2 LIKE :test','OR');
$criteria->params=array(
':test'=>'%test%',
);
コメントですでに述べたように、各モデルのデフォルトのsearch()
方法を使用することは不可能だと思います。ただし、他の選択肢もあります。たとえば、addCondition
代わりに使用できます。
$criteria = new CDbCriteria;
$criteria->with = array('A', 'B', 'C', 'D', 'E');
$criteria->together = true; // you'll need together so that the other tables are joined in the same query
$criteria->addCondition('A.field1 = "test"','OR');
$criteria->addCondition('A.field2 = "test"','OR');
// and so on
compare
比較のために演算子を「インテリジェントに」決定したい場合、たとえば、ユーザー入力からテスト値を取得していて、ユーザーが演算子(<、>、<=など)の使用が許可されています。条件で使用する演算子を決定した後、compare
それに応じて、を含む他の関数を呼び出しますaddCondition
。したがって、を使用addCondition
すると、これらの不要なチェックを少なくとも回避できます。
さらに、あなたがしなければならないのが同等性だけをチェックすることである場合、すなわちあなたのSQLが次のWHERE
ようになっている場合:
WHERE A.field1 = "test" OR A.field2 = "test"
そうすれば、は必要なくaddCondition
、もっと複雑なものを使用することができますcondition
(doc):
$criteria->condition='A.field1 = "test" OR A.field2 = "test"';
// or even better if you use params
$criteria->condition='A.field1 =:test1 OR A.field2 =:test2 OR B.field1 =:test3 OR B.field2 =:test3';
$criteria->params=array(
':test1'=>'test',
':test2'=>'anothertest',
'test3'=>'tests' // omitting ':' here for params also works
);