我的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的方括号中都有:
其中(condition1a =a和condition1b = b)和(condition2a =a和condition2b = b)
而不是
其中(condition1a =a和condition1b = b) OR (condition2a =a和condition2b = b)
发布于 2012-12-17 05:20:24
您可以简单地使用第三个参数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)发布于 2012-12-17 05:00:24
使用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); https://stackoverflow.com/questions/13908460
复制相似问题