[Dbix-class] DBIx::Class::Relationship issue

abhijith abhijithg at deeproot.co.in
Tue Mar 20 09:16:59 GMT 2007


hi...

The query below is based on the DBIx::Class::Manual::Example, 

sub get_cds_by_artist
{
    print "cd by artist: \n";
    my $name = shift;
   
    my $rs = $schema->resultset('Artist')->search(
       { 
          'me.name' => $name 
       },
       {
          join     => [qw/ cds /], 
	  prefetch => [qw/ cds /]
       }
    );

    while( my $artist = $rs->next)
    {
	print $artist->cds->title . "\n\n";
    }
}

The app is throwing the following error:
Can't locate object method "title" via package "DBIx::Class::ResultSet" 

If I am not wrong, the accessors are not being created... 
Could somebody help me out with this.


Schema:
--------------------------------------------------------
package Main::Artist;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('artist');
__PACKAGE__->add_columns(qw/ artistid name /);
__PACKAGE__->set_primary_key('artistid');
__PACKAGE__->has_many('cds' => 'Main::Cd'); 
1;


package Main::Cd;
use base qw/DBIx::Class/;

__PACKAGE__->load_components(qw/PK::Auto Core/);
__PACKAGE__->table('cd');
__PACKAGE__->add_columns(qw/ cdid artist title/);
__PACKAGE__->set_primary_key('cdid');
__PACKAGE__->belongs_to('artist' => 'Main::Artist');
---------------------------------------------------------


PS:
This works fine : 

    my $rs = $schema->resultset('Cd')->search(
        { 
	    'artist.name' => $artistname
	},
        {
            join     => [qw/ artist /],
            prefetch => [qw/ artist /]
        }
    );
but what I am looking for, is to query on the class defining the
'has_many' relationship.




More information about the Dbix-class mailing list