X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRelationship%2FManyToMany.pm;h=07a244a21f05d1d06a425d43a85701f25f6607a7;hb=8c4b6c50e873a2b5993d1bfe0f40763d994b7da4;hp=a0edd92b1878661eeec23ed5655f3493c2cb0f03;hpb=d2d82857c6643eee65dd3642f0109c064766c90a;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Relationship/ManyToMany.pm b/lib/DBIx/Class/Relationship/ManyToMany.pm index a0edd92..07a244a 100644 --- a/lib/DBIx/Class/Relationship/ManyToMany.pm +++ b/lib/DBIx/Class/Relationship/ManyToMany.pm @@ -7,6 +7,11 @@ use warnings; use Carp::Clan qw/^DBIx::Class/; use Sub::Name (); +our %_pod_inherit_config = + ( + class_map => { 'DBIx::Class::Relationship::ManyToMany' => 'DBIx::Class::Relationship' } + ); + sub many_to_many { my ($class, $meth, $rel, $f_rel, $rel_attrs) = @_; @@ -107,7 +112,14 @@ EOW "{$set_meth} needs a list of objects or hashrefs" ); my @to_set = (ref($_[0]) eq 'ARRAY' ? @{ $_[0] } : @_); - $self->search_related( $rel, ($rel_attrs||{})->{where},($rel_attrs||{})->{where}?{join => $f_rel}:{} )->delete; + # if there is a where clause in the attributes, ensure we only delete + # rows that are within the where restriction + if ($rel_attrs && $rel_attrs->{where}) { + $self->search_related( $rel, $rel_attrs->{where},{join => $f_rel})->delete; + } else { + $self->search_related( $rel, {} )->delete; + } + # add in the set rel objects $self->$add_meth($_, ref($_[1]) ? $_[1] : {}) for (@to_set); };