选择语言 :

 Module_OOP_ORM_Data::_renew_offset_changed_value

更新指定$offset的修改数据并设置到$data相应的key中

null Module_OOP_ORM_Data::_renew_offset_changed_value( string & $data , array $offset [, boolean $is_all_data = bool false , boolean $renew_original_field_data = bool false ] )

参数列表

参数 类型 描述 默认值
$data string $offset
$offset array $data
$is_all_data boolean 是否取得完整数据 bool false
$renew_original_field_data boolean 是否仅更新原始数据 bool false
File: ./modules/oop/orm/data.class.php
protected function _renew_offset_changed_value( & $data , $offset , $is_all_data = false , $renew_original_field_data = false )
{
    $config = $this->_get_offset_config($offset);
    if ( !$config ) return;

    # 虚拟字段
    if ( $config['is_virtual_field'] ) return;
    if ( !isset($config['field_name']) ) return;

    $field_name = $config['field_name'];

    if ( isset($data[$field_name]) )
    {
        # 已经有数据了
        return;
    }

    if ( !$renew_original_field_data && isset($config['read_only']) && $config['read_only'] )
    {
        # 只读数据
        if ( $is_all_data )
        {
            $data[$field_name] = $this->_original_field_data[$field_name];
        }
        else
        {
            return;
        }
    }
    $tmp_data = $this->_offset_data[$offset];

    # 只有是对象的数据才处理
    if ( is_object($tmp_data) )
    {
        # 调用是否修改过数据的回调方法
        if ( true==$is_all_data )
        {
            $is_change = true;
        }
        elseif ( isset($config['object']['callback']['is_change']) )
        {
            $run = $config['object']['callback']['is_change'];
            $is_change = $tmp_data->$run();
        }
        elseif ( $tmp_data instanceof OOP_ORM_Data )
        {
            $is_change = $tmp_data->__orm_callback_data_is_change_();
        }
        else
        {
            $is_change  = true;
        }

        # 没有修改
        if ( !$is_change ) return;

        $tmp_data = OOP_ORM_Parse::get_object_field_data($tmp_data, isset($config['object']['callback']['get_data']) ? $config['object']['callback']['get_data'] : null);
        if ( false === $tmp_data )
        {
            return;
        }
    }

    if ( isset($config['_all_sub_offset']) )
    {
        # 含有子节点数据
        foreach ($config['_all_sub_offset'] as $sub_offset)
        {
            $sub_config = $this->_get_offset_config($sub_offset);
            if ( !$sub_config || !isset($sub_config['_sub_key_name']) )continue;

            if ( isset($this->_offset_data[$sub_offset]) )
            {
                $sub_data = $this->_offset_data[$sub_offset];
                if ( is_object($sub_data) )
                {
                    # 数据是一个对象
                    $sub_data = OOP_ORM_Parse::get_object_field_data($sub_data, isset($sub_config['object']['callback']['get_data']) ? $sub_config['object']['callback']['get_data'] : null);
                }
                # 将子节点数据合并进来
                OOP_ORM_Parse::set_sub_offset_data( $tmp_data , $sub_data , explode('.',$sub_config['_sub_key_name']) );
            }
        }
    }

    # 序列化数据
    if ( isset($config['format']) )
    {
        $tmp_data = OOP_ORM_Parse::format_data($tmp_data, $config['format']);
    }

    if ( $renew_original_field_data )
    {
        $this->_original_field_data[$field_name] = $tmp_data;
    }
    elseif ( true==$is_all_data || $tmp_data!==$this->_original_field_data[$field_name] )
    {
        # 如果需要完整数据,或者数据发生修改
        $data[$field_name] = $tmp_data;
    }
}