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] >