[Dbix-class] DBIC_TRACE query OK but code throws an exception (many-to-many relationship)

Peter Rabbitson rabbit+dbic at rabbit.us
Tue Nov 9 15:18:54 GMT 2010


Denis BAURAIN wrote:
> Hi,
> 
> I am new to DBIC and to this list. Thus, I apologise in advance if my
> first question has already been asked a thousand times.
> 
> I am struggling to convert an existing SQL query into DBIC parlance...
> Oddly, DBIC_TRACE shows that the expected query is indeed built but my
> Perl code throws an error. I would appreciate any enlightenment about
> what I am necessarily doing wrong... I provide the minimal context below.
> 
> 
> my @matures = $schema->resultset('miRNA')
> 	->search( {'species.name' => 'Homo sapiens'}, {
> 		'join' => ['species', {'miRNA_matures' => 'mature'}],
> 		'distinct' => 1,
> 		'columns' => [qw/mature.mature_acc mature.mature_name/]
> 	})->all
> ;
> 
> Here's the output with the error. If I fill the '?' placeholder and run
> the traced query against the database, it gives me what I want (see below).
> 
> No such relationship 'mature' on miRNA at /Users/denis/perl5/perlbrew/

Sorry for the late reply, I thought someone else replied already. The problem
here is that columns == select/as specifications, so what you wrote ends
up being:

as => [qw/mature.mature_acc mature.mature_name/]

which translates as:

$main_obj->mature->mature_acc (foo)
$main_obj->mature->mature_name (bar)

What you needed instead was:

as => [qw/miRNA_matures,mature.mature_acc/]
which would correctly populate
$main_obj->miRNA_matures->slice(whichever relation this is)->mature->mature_acc('foo')

I may try to add an early-barf for this but it isn't very easy. Will ponder.

Cheers



More information about the DBIx-Class mailing list