From: Michael G Schwern Date: Sun, 24 Feb 2008 09:12:46 +0000 (+0000) Subject: Ensure that has_many() loads the foreign class. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=4656f62f9425820ef15c30e2cc6bfb0bff2db423;p=dbsrgits%2FDBIx-Class-Historic.git Ensure that has_many() loads the foreign class. --- diff --git a/lib/DBIx/Class/CDBICompat/Relationships.pm b/lib/DBIx/Class/CDBICompat/Relationships.pm index 6893bc9..f410976 100644 --- a/lib/DBIx/Class/CDBICompat/Relationships.pm +++ b/lib/DBIx/Class/CDBICompat/Relationships.pm @@ -82,6 +82,7 @@ sub has_many { } if( !$f_key and !@f_method ) { + $class->ensure_class_loaded($f_class); my $f_source = $f_class->result_source_instance; ($f_key) = grep { $f_source->relationship_info($_)->{class} eq $class } $f_source->relationships; diff --git a/t/cdbi-t/has_many_loads_foreign_class.t b/t/cdbi-t/has_many_loads_foreign_class.t new file mode 100644 index 0000000..9ab5c25 --- /dev/null +++ b/t/cdbi-t/has_many_loads_foreign_class.t @@ -0,0 +1,37 @@ +use strict; +use Test::More; + + +BEGIN { + eval "use DBIx::Class::CDBICompat;"; + plan skip_all => 'Class::Trigger and DBIx::ContextualFetch required' if $@; + eval "use DBD::SQLite"; + plan $@ ? (skip_all => 'needs DBD::SQLite for testing') : (tests => 3); +} + + +use lib 't/testlib'; +use Director; + +# Test that has_many() will load the foreign class. +ok !Class::Inspector->loaded( 'Film' ); +ok eval { Director->has_many( films => 'Film' ); 1; } || diag $@; + +my $shan_hua = Director->create({ + Name => "Shan Hua", +}); + +my $inframan = Film->create({ + Title => "Inframan", + Director => "Shan Hua", +}); +my $guillotine2 = Film->create({ + Title => "Flying Guillotine 2", + Director => "Shan Hua", +}); +my $guillotine = Film->create({ + Title => "Master of the Flying Guillotine", + Director => "Yu Wang", +}); + +is_deeply [sort $shan_hua->films], [sort $inframan, $guillotine2]; \ No newline at end of file