[CDBI] has_many - how to specify link columns ?
Michael Reece
mreece at vinq.com
Tue Aug 15 17:53:42 BST 2006
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 at lists.digitalcraftsmen.net
> http://lists.digitalcraftsmen.net/mailman/listinfo/classdbi
---
michael reece :: software engineer :: mreece at vinq.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digitalcraftsmen.net/pipermail/classdbi/attachments/20060815/05fd34e5/attachment.htm
More information about the ClassDBI
mailing list