2012-12-17 86 views
1

結合addColumnCondition我有一對夫婦的下拉過濾器在我的GridView控件,在我的模型的搜索部分我:警予在CDbCriteria

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)); 
} 

我需要以某種方式結合這所以如果有人選擇兩三個下拉菜單(或三個),他們得到正確的結果,目前的SQL有有凡在每個addColumnCondition單獨的支架:

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

代替

WHERE(condition1a = a和condition1b = b)或(condition2a = a和condition2b = b)的

回答

2

您可以簡單地使用第三個參數operator of addColumnCondition,將其設置爲'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) 
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);