http://qs321.pair.com?node_id=741082


in reply to (Yet Another) DBIx::Class Joins question

Try join => { marketcode => { programcode => 'progfee' } } - note the hashref, not the arrayref.

My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

Replies are listed 'Best First'.
Re^2: (Yet Another) DBIx::Class Joins question
by sundialsvc4 (Abbot) on Feb 04, 2009 at 00:16 UTC

    I wonder if the problem is prefetch ... yes, I think it is.

    This seems to work:

    my $rs= $c->schema->resultset("TSeminar")->search( { 'semcode' => $code }, { "join" => [ 'marketcode', {'programcode'=>'progfee'} ], "prefetch" => [ 'marketcode', {'programcode'=>'progfee'} ], "order_by" => [qw/semcode/], "rows" => 1});

    In DBIx::Class::Manual there is a section called “multi-step prefetch” which I had failed to notice before. It says:

    From 0.04999_05 onwards, prefetch can be nested more than one relationship deep using the same syntax as a multi-step join ...

    And so it appears that this is indeed the syntax that you have to use.

    I'm writing this because it appears to work (that is to say, “it does not croak anymore”), and I'll now verify that it does work. (Unless I write to say otherwise, “it did.”)