Re: [CDBI] has_many - how to specify link columns ?

Andreas Grau <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.class-dbi
Message-ID <[email protected]>
Top. This actually does exactly what I was after. Thanks a ton,
Michael, Ed and all for your input.

Best from France,
Andreas

On Tue, 15 Aug 2006 09:53:42 -0700
Michael Reece <[email protected]> wrote:

> i think what you want is simply:
> 
>    articles->has_many( prices => 'prive2articles' => 'artid' );  #  
> third argument is 'my key in foreign table'
> 
> 
> this syntax ['price2articles' => 'artid'] is for 'mapping' across a  
> many-to-many table.
> 
> (for example, if price2articles.price were (instead of a float) a key  
> to another table (price), then you might:
> 
>    __PACKAGE__->has_many( prices => [ 'prices2articles' => 'price' ]  
> => 'artid' );
> 
> and that would automatically map the "price2articles->has_a 
> (price=>'prices')" relationship, as though you had done this instead:
> 
>    __PACKAGE__->has_many( _article_prices => 'prices2articles' =>  
> 'artid' );
>    sub prices {
>      my $self = shift;
>      return map $_->price, $self-> _article_prices;
>    }
> )
> 
> michael.
> 
> On Aug 15, 2006, at 2:22 AM, Andreas Grau wrote:
> 
> >
> > I just can not figure out how to specify the column names when using
> > has_many. I hope some kind soul can help me out.
> >
> > Say I have two tables:
> >
> > articles
> >   id varchar(32) primary key
> >   title varchar(255)
> >   baseprice double
> >
> > price2articles
> >   id varchar(32) primary key
> >   artid varchar(32)
> >   price double
> >
> > I need to link between articles.id and price2articles.artid - CDBI  
> > seems to insist on using the same column names, 'id' in this case.
> >
> >
> > So in package 'price2articles' I have
> > __PACKAGE__->has_a( 'artid' => ['articles']); # this direction works
> >
> > But what to say in 'articles' ? I just can't seem to find to describe
> > the relationship, and google fails on me as well. All tutorials happen
> > to share the same id names and primary keys, which is not the case  
> > here.
> >
> >
> > __PACKAGE__->has_many( 'prices' => ['price2articles' => 'artid'],  
> > 'id');
> >
> >
> > And my driver:
> >
> > my $artlist = new articles->retrieve_all();
> >
> > while (my $article = $artlist->next) {
> >
> >     print $article->title . " " . $article->baseprice; # works
> >
> >     ## nothing here :-(
> >     my @prices = $article->prices;
> >     foreach(@prices) {
> >         print " " . $_->price ;
> >     }
> >     print "\n";
> >
> > }
> >
> > This lists the articles, but nothing for the prices.
> >
> > Just for the records, I have the packages in different files, so the
> > ordering problem described elsewhere should not be reason. The has_a
> > works as well, I can 'go up' the relationship.
> >
> > I am pretty confident that this is simple as nothing, but I miserably
> > fail to detect the flaw.
> >
> > Anybody ?
> >
> > Thanks a ton in advance,
> > Andreas
> >
> > _______________________________________________
> > ClassDBI mailing list
> > ClassDBI-Ra3b/[email protected]
> > http://lists.digitalcraftsmen.net/mailman/listinfo/classdbi
> 
> ---
> michael reece :: software engineer :: [email protected]
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.