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

我需要以某种方式将其结合起来,因此如果有人选择三个下拉列表中的两个(或全部三个),他们会得到正确的结果,目前 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

您可以简单地使用 的第三个参数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 回答