いくつかの要素の配列があります
$cities = array('Paris', 'London', 'Berlin', 'Vinnitsa');
また、場合によっては基準をマージする必要があります。私はそのようなスコープを使用します:
public function city($cities){
foreach ($cities as $city){
$this->getDbCriteria()->mergeWith(array(
'condition'=>'city LIKE :num',
'params'=>array(':num'=>$city),
), false);
}
return $this;
}
次のようなものを生成する必要があります。
... WHERE ext_id='34'
AND (ctiy LIKE 'Paris' OR city LIKE 'London' OR city LIKE 'Berlin' OR city LIKE 'Vinnitsa')
AND (....)
しかし、その代わりに Yii-AR は以下を生成します:
WHERE (
(some_id= 34)
OR
(city LIKE 'Paris')
)
OR (city LIKE ''London'')
を使用して、1 つの括弧内に単一の OR 条件を作成するにはどうすればよいgetDbCriteria()->mergeWith()
ですか? カスタム準備された状態については知っていますが、面倒です;)
更新日: 2012 年 6 月 3 日:
私はこの問題を次のように解決しました:
$citiesReg = implode('|',$cities); //Convert to REGEXP
$this->getDbCriteria()->mergeWith(array(
'condition'=>'city REGEXP :city',
'params'=>array(':city'=>$citiesReg),
));
return $this;
UTF-8 を使用するには、さらに以下が必要です。文字列に変換する前。2. 条件を少し変更します: 'condition'=>'LOWER(city) REGEXP :city'
これは、MySQL lib REGEXP が utf-8 でうまく機能しないためです。
ご参加ありがとうございました!