我有一些元素
$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'')
如何在一个括号中使用单个 OR 条件getDbCriteria()->mergeWith()
?关于我知道的自定义准备条件,但这很麻烦;)
更新:2012-06-03:
我已经解决了这样的问题:
$citiesReg = implode('|',$cities); //Convert to REGEXP
$this->getDbCriteria()->mergeWith(array(
'condition'=>'city REGEXP :city',
'params'=>array(':city'=>$citiesReg),
));
return $this;
要使用 UTF-8,您还需要: 1. 将数组 mb_strtolower($val,'UTF-8') 的每个元素小写;在转换为字符串之前。2.稍微修改条件:'condition'=>'LOWER(city) REGEXP :city'
这是因为 MySQL lib REGEXP 无法与 utf-8 配合使用。
感谢参与!