我的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));
}
我需要以某种方式结合这个,所以如果有人选择三个下拉列表中的两个(或全部三个),他们得到正确的结果,目前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)
答案 0 :(得分: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)
答案 1 :(得分: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);