X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fp5-DBIx-Class-ResultSet-RecursiveUpdate;a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSet%2FRecursiveUpdate.pm;h=04142321b223ac7e0e2530b45d0e2cb0c5d36088;hp=90f5994d5d419a0b46b9dd0cc5a7a3cc32701e49;hb=db9660bec391cd788bf6b1bbee3ff4333c99633b;hpb=df9cba8acd38f0929da6d62ec6980cbc3415421a diff --git a/lib/DBIx/Class/ResultSet/RecursiveUpdate.pm b/lib/DBIx/Class/ResultSet/RecursiveUpdate.pm index 90f5994..0414232 100644 --- a/lib/DBIx/Class/ResultSet/RecursiveUpdate.pm +++ b/lib/DBIx/Class/ResultSet/RecursiveUpdate.pm @@ -2,7 +2,7 @@ use strict; use warnings; package DBIx::Class::ResultSet::RecursiveUpdate; -use version; our $VERSION = qv('0.008'); +our $VERSION = '0.012'; use base qw(DBIx::Class::ResultSet); @@ -107,8 +107,7 @@ sub recursive_update { # 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 ) { @@ -131,7 +130,7 @@ sub recursive_update { } 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, @@ -208,15 +207,17 @@ sub _update_relation { 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')); } }