- my $sub_object =
- $related_result->recursive_update( $updates->{$name}, $resolved );
- $object->set_from_related( $name, $sub_object );
+ my $sub_updates = $updates->{$name};
+ my $sub_object;
+ if( ref $sub_updates ){
+ # 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, resolved => $resolved );
+ }
+ }
+ elsif( ! ref $sub_updates ){
+ $sub_object = $related_result->find( $sub_updates )
+ unless (!$sub_updates && ($info->{attrs}{join_type} eq 'LEFT'));
+ }
+ $object->set_from_related( $name, $sub_object )
+ unless (!$sub_object && !$sub_updates && ($info->{attrs}{join_type} eq 'LEFT'));