1

GridViewには、モデルの検索部分にいくつかのドロップダウンフィルターがあります。

if ($this->agent_primary != "") {
    $criteria->addColumnCondition(array('agent_type_id'=>1, 'agent.agent_id'=>$this->agent_primary));
}

if ($this->agent_voice != "") {
    $criteria->addColumnCondition(array('agent_type_id'=>2, 'agent.agent_id'=>$this->agent_voice));
}

if ($this->agent_commercial != "") {
    $criteria->addColumnCondition(array('agent_type_id'=>3, 'agent.agent_id'=>$this->agent_commercial));
}

どういうわけかこれを組み合わせる必要があるので、誰かが3つのドロップダウンのうち2つ(または3つすべて)を選択すると正しい結果が得られます。現在、SQLにはaddColumnConditionごとに別々の括弧で囲まれたWHEREがあります。

WHERE(condition1a = a AND condition1b = b)AND(condition2a = a AND condition2b = b)

それ以外の

WHERE(condition1a = a AND condition1b = b)OR(condition2a = a AND condition2b = b)

4

2 に答える 2

2

の3番目のパラメータoperatoraddColumnCondition使用して、次のように設定するだけ'OR'です。

if ($this->agent_primary != "") {
    $criteria->addColumnCondition(array('agent_type_id'=>1, 'agent.agent_id'=>$this->agent_primary),'AND','OR');
}

そして、あなたは得るでしょう:

WHERE (agent_type = 1 AND agent.agent_id = X) OR (condition2a = a AND condition2b = b)
于 2012-12-17T05:20:24.953 に答える
0

addCondition関数を使用してここに条件を追加します$criteriaStr; ここで文字列を作成してで使用する必要があるため。

$criteriaStr = "";
if ($this->agent_primary != "") {
    $criteriaStr .= '(agent_type_id=1 AND agent.agent_id='.$this->agent_primary.')';
}

if ($this->agent_voice != "") {
    if($criteriaStr !== '' ) { $criteriaStr .= ' OR '; }

    $criteriaStr .= '(agent_type_id=2 AND agent.agent_id='.$this->agent_voice.')';
}

if ($this->agent_commercial != "") {
    if($criteriaStr !== '' ) { $criteriaStr .= ' OR '; }

    $criteriaStr .= '(agent_type_id=3 AND agent.agent_id='.$this->agent_commercial.')';
}

$criteria->addCondition($criteriaStr); 
于 2012-12-17T05:00:24.077 に答える