选择语言 :

 Module_OOP_ORM_Finder_DB::_get_id_field_cache_data

根据$bulider条件解析获取已缓存在PHP的数据

boolean Module_OOP_ORM_Finder_DB::_get_id_field_cache_data( array & $bulider , array & $id_cache_data )

参数列表

参数 类型 描述 默认值
$bulider array $bulider
$id_cache_data array $id_cache_data
返回值
  • boolean 是否需要再次读取
File: ./modules/oop/orm/finder/db.class.php
protected function _get_id_field_cache_data( &$bulider , &$id_cache_data )
{
    $not_need_find  = false;
    # $bulider条件中只有1个where,则尝试在数据ID缓存中获取
    if ( count($bulider['where'])==1 && ($bulider['where'][0]['AND'][1]=='=' || $bulider['where'][0]['AND'][1]=='in') )
    {
        #
        foreach ($bulider['where'] as $k=>$v)
        {
            if ( $v && $k!='where' )
            {
                return $not_need_find;
            }
        }
        $field_name = $bulider['where'][0]['AND'][0];
        if ( $field_name==$this->id_field_name() )
        {
            $value = $bulider['where'][0]['AND'][2];
            $id_data = OOP_ORM_Data::id_field_cache_data($this->get_orm_name('Data'), $value);
            if ($id_data)
            {
                # 获取到数据
                if ( $bulider['where'][0]['AND'][1]=='in' )
                {
                    $new_value = array();
                    foreach ($value as $v)
                    {
                        if ( !isset($id_data[$v]) )
                        {
                            $new_value[] = $v;
                        }
                    }
                    if ( $new_value )
                    {
                        # 更新where条件
                        $bulider['where'][0]['AND'][2] = $new_value;
                    }
                    else
                    {
                        $not_need_find  = true;
                    }
                    $id_cache_data = $id_data;
                }
                else
                {
                    $not_need_find  = true;
                    $id_cache_data = array($id_data);
                }
            }
        }
    }

    return $not_need_find;
}