On Fri, 10 Nov 2006, Josef Karthauser wrote:

Hey there,

I wonder, would someone be able to help me with a multi field key that
I'm having trouble with?

Yup

I've got three tables:

package Contact;
   use base qw/DBIx::Class/;

   __PACKAGE__->load_components(qw/ PK::Auto Core /);
   __PACKAGE__->table('contact');
   __PACKAGE__->add_columns(qw/
       contactid, owner, first_name, last_name, org_name/);
   __PACKAGE__->set_primary_key(qw/contactid owner/);
   __PACKAGE__->has_many(domains => 'Domain',
               { 'registrant' => 'contactid', 'owner' => 'owner' } );

Should be:
    __PACKAGE__->has_many(domains => 'Domain',
                { 'foreign.registrant' => 'self.contactid',
                  'foreign.owner' => 'self.owner' } );



   __PACKAGE__->belongs_to(owner => 'Owner');

package Domain;
   use base qw/DBIx::Class/;

   __PACKAGE__->load_components(qw/ PK::Auto Core /);
   __PACKAGE__->table('domain');
   __PACKAGE__->add_columns(qw/domainid domainnam owner registrant/);
   __PACKAGE__->set_primary_key('domainid');
   __PACKAGE__->belongs_to(owner => 'Owner');
   __PACKAGE__->belongs_to(registrant => 'Contact',
               { owner => 'owner', contactid => 'registrant' });

Should be:

    __PACKAGE__->belongs_to(registrant => 'Contact',
                { 'foreign.owner' => 'self.owner',
                  'foreign.contactid' => 'self.registrant' });


package Tao::DBIx::Owner;
   use base qw/DBIx::Class/;

   __PACKAGE__->load_components(qw/ PK::Auto Core /);
   __PACKAGE__->table('owner');
   __PACKAGE__->add_columns(qw/ownerid contact/);
   __PACKAGE__->set_primary_key('ownerid');
   __PACKAGE__->belongs_to(contact => 'Tao::DBIx::Contact',
           { ownerid => 'owner', contact => 'contactid' });

You can figure this one out..


I've removed the columns which are not relevant to this query, so the
database looks a bit sparse.  Notice that the contact table has a two
column primary key.

The problem I have is with the has_many relationship in the contact
table.  Each contact can have many domains, and I want to read them.

   $contact = 1234;
   print $contact->first_name, "\n";
   my @domains = $contact->domains;
   exit;

However I get a relationship error,

   % ./test3.pl
   Kieren
   DBIx::Class::Relationship::Accessor::__ANON__(): Invalid rel cond key
        owner at ./test3.pl line 3


Certainly, though I prefer fishing rods, try:

DBIx::Class::Relationship::Base for docs on foreign/self. I guess I should add more examples of these into ::Relationship.

Jess


_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/

Reply via email to