选择语言 :

 Driver_Database_Driver_Mongo::_compile_conditions

Compiles an array of conditions into an SQL partial. Used for WHERE and HAVING.

string Driver_Database_Driver_Mongo::_compile_conditions( object $conditions , array $parameters )

参数列表

参数 类型 描述 默认值
$conditions object Database instance
$parameters array Condition statements
返回值
  • string
File: ./drivers/database/mongo/mongo.class.php
protected function _compile_conditions(array $conditions, $parameters)
{
    $last_logic = '$and';
    $tmp_query_list = array();
    $query = array();
    $tmp_query = & $query;
    $condition_num = 0;
    $multikey_mod = false;    //同字段多条件模式,适用于$or和$and条件

    foreach ($conditions as $group)
    {
        foreach ($group as $logic => $condition)
        {
            $logic = '$'.strtolower($logic);        //$or,$and

            if ($condition === '(')
            {
                $tmp_query_list[] = array();                                  //增加一行数据
                unset($tmp_query);                                            //删除引用关系,这样数据就保存在了$tmp_query_list里
                $tmp_query =& $tmp_query_list[count($tmp_query_list)-1];      //把指针移动到新的组里
                $last_logic_list[] = $last_logic;                             //放一个备份
                $last_logic = '$and';                                         //新组开启,把$last_logic设置成$and
            }
            elseif ($condition === ')')
            {
                # 关闭一个组
                $last_logic = array_pop($last_logic_list);                    //恢复上一个$last_logic

                # 将最后一个移除
                $tmp_query2 = array_pop($tmp_query_list);

                $c = count($tmp_query_list);
                unset($tmp_query);
                if ($c)
                {
                    $tmp_query =& $tmp_query_list[$c-1];
                }
                else
                {
                    $tmp_query =& $query;
                }
                Database_Driver_Mongo::_compile_paste_data($tmp_query , $tmp_query2 , $last_logic , $logic);

                unset($tmp_query2,$c);
            }
            else
            {
                list ($column, $op, $value) = $condition;
                $tmp_option = Database_Driver_Mongo::_compile_set_data($op, $value , $parameters);
                Database_Driver_Mongo::_compile_paste_data($tmp_query, $tmp_option , $last_logic , $logic ,$column);

                $last_logic = $logic;
            }

        }
    }

    return $query;
}