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'')

を使用して、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 でうまく機能しないためです。

ご参加ありがとうございました!

4

2 に答える 2

1

addInConditionを試してみましょう。最初のパラメーターは条件(たとえば、'cite LIKE \'London \'')で、2番目のパラメーターは演算子(ORまたはAND)です。

配列(都市)をforeachして、addInConditionを使用できます。

于 2012-06-02T06:11:03.487 に答える
0

配列のmergeWithおよびforeachの使用については、こちらをご覧ください。多分それはkamankilyが提案するものですが、$criteriaを使用します(addInConditionではありません)

于 2012-10-19T22:07:40.690 に答える