[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