选择语言 :

 Driver_Database_Driver_Mongo::_compile_paste_data

null Driver_Database_Driver_Mongo::_compile_paste_data( )
File: ./drivers/database/mongo/mongo.class.php
protected static function _compile_paste_data(&$tmp_query , $tmp_option , $last_logic , $now_logic , $column=null)
{
    if ($last_logic!= $now_logic)
    {
        // 当$and $or 不一致时,则把前面所有的条件合并为一条组成一个$and|$or的条件
        if ($column)
        {
            $tmp_query = array($now_logic => $tmp_query ? array($tmp_query, array($column=>$tmp_option)) : array(array($column=>$tmp_option)));
        }
        else
        {
            $tmp_query = array($now_logic => $tmp_query ? array($tmp_query, $tmp_option) : array($tmp_option));
        }
    }
    elseif (isset($tmp_query[$now_logic]))
    {
        // 如果有 $and $or 条件,则加入
        if (is_array($tmp_option) || !$column)
        {
            $tmp_query[$now_logic][] = $tmp_option;
        }
        else
        {
            $tmp_query[$now_logic][] = array($column=>$tmp_option);
        }
    }
    else if ($column)
    {
        if (isset($tmp_query[$column]))
        {
            // 如果有相应的字段名,注,这里面已经不可能$logic=='$or'了
            if (is_array($tmp_option) && is_array($tmp_query[$column]))
            {
                // 用于合并类似 $tmp_query = array('field_1'=>array('$lt'=>1));
                // $tmp_option = array('field_1'=>array('$gt'=>10)); 这种情况
                // 最后的合并结果就是 array('field_1'=>array('$lt'=>1,'$gt'=>10));
                $need_reset = false;
                foreach ($tmp_option as $tmpk => $tmpv)
                {
                    if (isset($tmp_query[$column][$tmpk]))
                    {
                        $need_reset = true;
                        break;
                    }
                }

                if ($need_reset)
                {
                    $tmp_query_bak = $tmp_query; // 给一个数据copy
                    $tmp_query = array('$and' => array()); // 清除$tmp_query

                    // 将条件全部加入$and里
                    foreach ($tmp_query_bak as $tmpk => $tmpv)
                    {
                        $tmp_query['$and'][] = array($tmpk => $tmpv);
                    }
                    unset($tmp_query_bak);

                    // 新增加的条件也加入进去
                    foreach ($tmp_option as $tmpk => $tmpv)
                    {
                        $tmp_query['$and'][] = array($column=>array($tmpk => $tmpv));
                    }
                }
                else
                {
                    // 无需重新设置数据则合并
                    foreach ($tmp_option as $tmpk => $tmpv)
                    {
                        $tmp_query[$column][$tmpk] = $tmpv;
                    }
                }

            }
            else
            {
                $tmp_query['$and'] = array
                (
                    array($column => $tmp_query[$column]),
                    array($column => $tmp_option),
                );
                unset($tmp_query[$column]);
            }
        }
        else
        {
            // 直接加入字段条件
            $tmp_query[$column] = $tmp_option;
        }
    }
    else
    {
        $tmp_query = array_merge($tmp_query,$tmp_option);
    }

    return $tmp_query;
}