PHP - 范围坚持 - Codeigniter

时间:2011-01-20 17:05:39

标签: php codeigniter activerecord scope

我的问题源于我编写的模型,用于构建包含“条件”的预定义搜索对象的查询,每个搜索都有一个属性$search->criteria,它是一个条件对象数组....

Criteria (

    "name"    => "name",  //name of given field to be searched
    "expr"    => "expr",  //could be "<=" ">=" "="
    "s_value" => "value"  //value to be searched with

)

我的搜索功能部分是在查询中添加正确的where语句...

    if(count($criteria)) {
        foreach($criteria as $crit) {
            $this->{$crit['name']}($crit['s_value'],$crit['expr']);
        }
    }

现在终于循环调用的函数,'name'在这里对应于条件对象设置为$ criteria ['name'] ....

function name($value,$expr = '=') {              

    $this->db->where('specific_field_name '.$expr,$value);

}

现在提出问题..

我想在'name'中创建一个变量,它将持续超过一次执行,因此,例如,如果我有两个具有相同名称的条件并且它执行两次,我想在它的范围内维护一个变量执行。

修改

想要做什么。 我有这样的多种功能,都需要自己的计数器。

function name($value,$expr = '=') {              
    if(isset($count))        
        $this->db->or_where('specific_field_name '.$expr,$value);
        $count++;
    }
    else {
        $count = 1;
        $this->db->where('specific_field_name '.$expr,$value);
    }
}

想法?

    if(count($criteria)) {
        $criteria_count = array()
        foreach($criteria as $crit) {
            if(isset($criteria_count[$crit['name']])) {
                $criteria_count[$crit['name']]++;
            }
            else {
                $criteria_count[$crit['name']] = 1;
            }
            $this->{$crit['name']}($crit['s_value'],$crit['expr'],$criteria_count[$crit['name']]);
        }
    }

更改主搜索功能以维护$criteria_count数组,并将名称作为键并将计数传递给特定函数。

1 个答案:

答案 0 :(得分:1)

如果您真的想这样做,可以使用global语句。

编辑:这是我如何将计数传递给名称并以此方式跟踪它。

在搜索功能开始时:$count = 0;

if(count($criteria)) {
        foreach($criteria as $crit) {
            $count = $this->{$crit['name']}($crit['s_value'],$crit['expr'],$count);
        }
    }

然后是名称功能:

function name($value,$expr = '=',$count) {              
    if($count > 0)        
        $this->db->or_where('specific_field_name '.$expr,$value);
        $count++;
    }
    else {
        $count = 1;
        $this->db->where('specific_field_name '.$expr,$value);
    }
return $count;
}
相关问题