X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRow.pm;h=5425fd80ce7fb5144113d96a7aabc6d7f42740ce;hb=a4e58b18bffc45a7dd202c89209e68fbf5594098;hp=a4a18b97f64bee8f1babae7c20e44bb8b3d60b2e;hpb=8a3e2074f4cc6dddf03f7ed781cea8143cfa0acd;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Row.pm b/lib/DBIx/Class/Row.pm index a4a18b9..5425fd8 100644 --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@ -1174,16 +1174,21 @@ sub copy { next unless $rel_info->{attrs}{cascade_copy}; - my $resolved = $rsrc->_resolve_condition( - $rel_info->{cond}, $rel_name, $new, $rel_name - ); - + my $foreign_vals; my $copied = $rel_names_copied->{ $rel_info->{source} } ||= {}; - foreach my $related ($self->search_related($rel_name)->all) { - $related->copy($resolved) - unless $copied->{$related->ID}++; - } + $copied->{$_->ID}++ or $_->copy( + + $foreign_vals ||= $rsrc->_resolve_relationship_condition( + infer_values_based_on => {}, + rel_name => $rel_name, + self_result_object => $new, + + self_alias => "\xFE", # irrelevant + foreign_alias => "\xFF", # irrelevant, + )->{inferred_values} + + ) for $self->search_related($rel_name)->all; } return $new; }