选择语言 :

 Module_OOP_ORM_Data::_create_data

创建实例化数据

null Module_OOP_ORM_Data::_create_data( string $index )

参数列表

参数 类型 描述 默认值
$index string $key
File: ./modules/oop/orm/data.class.php
protected function _create_data($index)
{
    # 标记为已创建
    $this->_created_offset[$index] = true;

    $config = $this->_get_offset_config($index);
    if (!$config)return false;

    # 是否已经设置过数据
    $offset_isset = isset($this->_offset_data[$index]);

    if ($offset_isset)
    {
        $offset_data = $data = $this->_offset_data[$index];
        if ( is_object($data) && $data instanceof stdClass )
        {
            # 将stdClass对象转成array类型
            $data = (array)$data;
        }
    }
    else
    {
        if ( isset($config['cache']) )
        {
            # 数据缓存
            $data = OOP_ORM_Parse::get_offset_cache_data($this , $index , $config['cache']);
            if (false!==$data)
            {
                $this->_offset_data[$index] = $data;
                return true;
            }
        }
        else
        {
            $data = false;
        }

        if ( null===$data || false===$data )
        {
            if ( isset($config['_parent_offset_name']) )
            {
                # 映射字段
                $parent_offset = $config['_parent_offset_name'];
                $data = OOP_ORM_Parse::get_sub_offset_data($this->$parent_offset , explode('.',$config['_sub_key_name']) ,$index );
            }
            elseif ( isset($config['orm']) )
            {
                # 获取数据
                $data = OOP_ORM_Parse::get_orm_data_by_config($this,$config['orm'], $index);
            }
            elseif ( isset($config['data']) )
            {
                # 处理mapping
                if ( isset($config['data']['mapping']) )
                {
                    foreach ( $config['data']['mapping'] as $k => $v )
                    {
                        $config['data']['where'][$v] = $this->$k;
                    }
                }

                $data = false;
                # 处理缓存
                if ( isset($config['data']['cache']) )
                {
                    $data = OOP_ORM_Parse::get_cache_data($index, @$config['data']['where'], $config['data']['cache']);
                }
                if ( false === $data )
                {
                    # 获取数据
                    $data = OOP_ORM_Parse::get_data($config['data'] , $this);

                    # 缓存数据
                    if ( isset($config['data']['cache']) )
                    {
                        OOP_ORM_Parse::set_cache_data($index, @$config['data']['where'], $config['data']['cache'], $data);
                    }
                }
            }
            else
            {
                $data = false;
            }
        }
    }

    // 需要返回OBJECT对象
    if ( isset($config['object']) )
    {
        $object_name = $config['object']['name'];
        if ( !class_exists($object_name, true) )
        {
            throw new Exception('指定的对象:' . $object_name . '不存在!');
        }
        if ( isset($config['object']['callback']['set_data']) )
        {
            $obj = new $object_name();
            $call_set_data_function = $config['object']['callback']['set_data'];
            $obj->$call_set_data_function($data);
        }
        else
        {
            $obj = new $object_name($data);
        }
        unset($data); //释放引用关系
        $data = $obj;
    }

    if ( !$offset_isset || (isset($offset_data) && $data!==$offset_data) )
    {
        $this->_offset_data[$index] = $data;
    }

    # 设置缓存
    if ( false!==$data && isset($config['cache']) )
    {
        OOP_ORM_Parse::set_offset_cache_data($this , $index , $config['cache'] , $data);
    }

    return true;
}