1

我有一些元素

$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 配合使用。

感谢参与!

4

2 回答 2

1

让我们试试addInCondition,第一个参数是条件(例如 'cite LIKE \'London\' '),第二个参数是运算符(OR 或 AND)。

您可以 foreach 数组(城市)并使用 addInCondition。

于 2012-06-02T06:11:03.487 回答
0

在这里查看有关使用 mergeWith 和 foreach 数组的信息。也许这是 kamankily 建议的,但使用 $criteria (不是 addInCondition)

于 2012-10-19T22:07:40.690 回答