X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCDBICompat%2FHasMany.pm;h=382b9cb2b4babf98426f01a8224100465f3f3374;hb=093fc7a6ef41c585afecfbc3ed18e300e65a1cd5;hp=acc70418d4fa7da6822b7add031604ea2f9f61fc;hpb=33ce49d650a60eebc0d9e99d6458239c5e35e70f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/CDBICompat/HasMany.pm b/lib/DBIx/Class/CDBICompat/HasMany.pm index acc7041..382b9cb 100644 --- a/lib/DBIx/Class/CDBICompat/HasMany.pm +++ b/lib/DBIx/Class/CDBICompat/HasMany.pm @@ -1,4 +1,5 @@ -package DBIx::Class::CDBICompat::HasMany; +package # hide from PAUSE + DBIx::Class::CDBICompat::HasMany; use strict; use warnings; @@ -12,40 +13,15 @@ sub has_many { ($f_class, @f_method) = @$f_class; } - my ($pri, $too_many) = keys %{ $class->_primaries }; - $class->throw( "has_many only works with a single primary key; ${class} has more" ) - if $too_many; - my $self_key = $pri; - - eval "require $f_class"; + if (ref $f_key eq 'HASH' && !$args) { $args = $f_key; undef $f_key; }; - if (ref $f_key eq 'HASH') { $args = $f_key; undef $f_key; }; - - #unless ($f_key) { Not selective enough. Removed pending fix. - # ($f_rel) = grep { $_->{class} && $_->{class} eq $class } - # $f_class->_relationships; - #} - - unless ($f_key) { - #warn join(', ', %{ $f_class->_columns }); - $class =~ /([^\:]+)$/; - #warn $1; - $f_key = lc $1 if $f_class->_columns->{lc $1}; + $args ||= {}; + if (delete $args->{no_cascade_delete}) { + $args->{cascade_delete} = 0; } - $class->throw( "Unable to resolve foreign key for has_many from ${class} to ${f_class}" ) - unless $f_key; - $class->throw( "No such column ${f_key} on foreign class ${f_class}" ) - unless $f_class->_columns->{$f_key}; - $args ||= {}; - my $cascade = not (ref $args eq 'HASH' && delete $args->{no_cascade_delete}); + $class->next::method($rel, $f_class, $f_key, $args); - $class->add_relationship($rel, $f_class, - { "foreign.${f_key}" => "self.${self_key}" }, - { accessor => 'multi', - join_type => 'LEFT', - ($cascade ? ('cascade_delete' => 1) : ()), - %$args } ); if (@f_method) { no strict 'refs'; no warnings 'redefine';