use warnings;
package DBIx::Class::ResultSet::RecursiveUpdate;
-use version; our $VERSION = qv('0.008');
+our $VERSION = '0.012';
use base qw(DBIx::Class::ResultSet);
# don't allow insert to recurse to related objects - we do the recursion ourselves
# $object->{_rel_in_storage} = 1;
- $object->update_or_insert;
-
+ $object->update_or_insert if $object->is_changed;
# updating many_to_many
for my $name ( keys %$updates ) {
}
for my $elem ( @updates ) {
if ( ref $elem ) {
- push @rows, $result_source->resultset->find($elem);
+ push @rows, recursive_update( resultset => $result_source->resultset, updates => $elem );
}
else {
push @rows,
object => $object->$name
);
}
- else{
+ else{
$sub_object =
recursive_update( resultset => $related_result, updates => $sub_updates, resolved => $resolved );
}
}
elsif( ! ref $sub_updates ){
- $sub_object = $related_result->find( $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 );
+ $object->set_from_related( $name, $sub_object )
+ unless (!$sub_object && !$sub_updates && ($info->{attrs}{join_type} eq 'LEFT'));
}
}