- $sub_updates = { %$sub_updates, %$resolved } if $resolved && ref( $sub_updates ) eq 'HASH';
- my $sub_object =
- recursive_update( resultset => $related_result, updates => $sub_updates );
+ my $sub_object;
+ if( ref $sub_updates ){
+ $sub_updates = { %$sub_updates, %$resolved } if $resolved && ref( $sub_updates ) eq 'HASH';
+ # for might_have relationship
+ if( $info->{attrs}{accessor} eq 'single' && defined $object->$name ){
+ $sub_object = recursive_update(
+ resultset => $related_result,
+ updates => $sub_updates,
+ object => $object->$name
+ );
+ }
+ else{
+ $sub_object =
+ recursive_update( resultset => $related_result, updates => $sub_updates );
+ }
+ }
+ elsif( ! ref $sub_updates ){
+ $sub_object = $related_result->find( $sub_updates );
+ }