Hi all,

I have the following tables and relationships:

Module --< ModuleTag >-- Tag

MyApp::Result::Module:

__PACKAGE__->has_many( 'module_tags' => ' MyApp::Result::ModuleTag', 'module' );
__PACKAGE__->many_to_many('tags' => 'module_tags', 'tag' );

MyApp::Result::Tag:

__PACKAGE__->has_many( 'tag_modules' => 'MyApp::Result::ModuleTag', 'tag' );
__PACKAGE__->many_to_many('modules' => 'tag_modules', 'module' );

MyApp::Result::ModuleTag:

__PACKAGE__->belongs_to( tag => ' MyApp::Result::Tag', 'tag' );
__PACKAGE__->belongs_to( module => ' MyApp::Result::Module', 'module' );

MyApp::ResultSet::Tag:

sub weightings {
    my $self = shift;
    return $self->search_rs(
                {},
                { 
                        join     => 'tag_modules',
                      select   => [ 'me.id', 'me.name', { count => 
'tag_modules.tag' } ],
                        as       => [qw/ id name weighting  /],
                        group_by => 'me.name',
                }
        );
}

Test cases:

# 1:
$schema->resultset('Tag')->weightings();

... this does what I expect and returns correct results and following sql:
# SELECT me.id, me.name, COUNT( tag_modules.tag ) 
# FROM Tag me LEFT JOIN Module_Tag tag_modules ON tag_modules.tag = me.id 
# GROUP BY me.name

# 2:
$module1->tags->weightings();

... this dies producing error:

no such column: me.name [for Statement "SELECT me.id, me.name, COUNT( 
tag_modules.tag ) FROM Module_Tag me JOIN Tag tag ON tag.id = me.tag LEFT JOIN 
Module_Tag tag_modules ON tag_modules.tag = tag.id WHERE ( me.module = ? ) 
GROUP BY me.name"]

I was expecting this resultset chaining to work. I'm not sure if I'm missing a 
trick here in my aliases, or if this should be possible or if I'm doing it 
wrong.
Anybody have any suggestions?

Thanks,
Anthony

_______________________________________________
List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/
Searchable Archive: http://www.grokbase.com/group/[email protected]

Reply via email to