更新指定$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
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;
}
}