[Dbix-class] Accessors for joined table columns
ben at drn.org
ben at drn.org
Sun May 18 13:19:06 BST 2008
Hi,
I've been unsuccessful in creating an accessor alias for a column in a
many-to-one joined table. Here's my simplified schema defs:
package Track;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/UUIDColumns PK::Auto UTF8Columns Core/);
__PACKAGE__->table('track');
__PACKAGE__->resultset_class('DBIx::Class::ResultSet::Data::Pageset');
__PACKAGE__->add_columns(qw/id name/);
__PACKAGE__->set_primary_key(qw/id/);
__PACKAGE__->uuid_columns(qw/id/);
__PACKAGE__->uuid_class('::Data::UUID');
__PACKAGE__->utf8_columns(qw/name/);
__PACKAGE__->has_many(trackdescriptions => 'TrackDescription', 'track_id');
__PACKAGE__->add_columns('trackdescriptions.description' => { accessor =>
'description' });
package TrackDescription;
use base qw/DBIx::Class/;
__PACKAGE__->load_components(qw/UUIDColumns UTF8Columns Core/);
__PACKAGE__->table('track_description');
__PACKAGE__->add_columns(qw/track_id locale_id description/);
__PACKAGE__->uuid_columns(qw/track_id locale_id/);
__PACKAGE__->uuid_class('::Data::UUID');
__PACKAGE__->utf8_columns(qw/description/);
__PACKAGE__->belongs_to( track => 'Track', 'track_id' );
Now in my (Catalyst Controller) code, assuming I wanted all tracks with
descriptions at a particular locale pulled back in 1 query:
$c->stash->{track} = $c->model('Track')->search_rs(
{ 'trackdescriptions.locale_id' => $my_locale_id }
{
select => [
'id',
'name',
'description'
],
as => [
qw/id name description/
],
join => 'trackdescriptions',
prefetch => 'trackdescriptions'
}
)->single;
This correctly pulls the data back, but in my Template Toolkit template I
can only access the description using:
track.trackdescriptions.description
I was hoping the accessor would enable me to access the description via:
track.description
What have I missed here? Is this a TT list vs method issue?
Note that in my actual code, I'm using some additional database functions in
the SELECT - otherwise I could remove the select/as altogether.
Thanks,
Ben
More information about the DBIx-Class
mailing list