|
NAMEDBIx::Class::SQLMaker::Role::SQLA2Passthrough - A test of future possibilitiesSYNOPSIS
See "examples/sqla2passthrough.pl" for a small amount of running code. SETUP(on_connect_call => sub { my ($storage) = @_; $storage->sql_maker ->with::roles('DBIx::Class::SQLMaker::Role::SQLA2Passthrough'); }) expand_join_condition__PACKAGE__->has_many(minions => 'Blah::Person' => sub { my ($args) = @_; $args->{self_resultsource} ->schema->storage->sql_maker ->expand_join_condition( $args ); }); on__PACKAGE__->has_many(minions => 'Blah::Person' => on { { 'self.group_id' => 'foreign.group_id', 'self.rank' => { '>', 'foreign.rank' } } }); Or with ParameterizedJoinHack, __PACKAGE__->parameterized_has_many( priority_tasks => 'MySchema::Result::Task', [['min_priority'] => sub { my $args = shift; return +{ "$args->{foreign_alias}.owner_id" => { -ident => "$args->{self_alias}.id", }, "$args->{foreign_alias}.priority" => { '>=' => $_{min_priority}, }, }; }], ); becomes __PACKAGE__->parameterized_has_many( priority_tasks => 'MySchema::Result::Task', [['min_priority'] => on { { 'foreign.owner_id' => 'self.id', 'foreign.priority' => { '>=', { -value => $_{min_priority} } } } }] ); Note that foreign/self can appear in such a condition on either side, BUT if you want DBIx::Class to be able to use a join-less version you must ensure that the LHS is all foreign columns, i.e. on { +{ 'foreign.x' => 'self.x', 'self.y' => { -between => [ 'foreign.y1', 'foreign.y2' ] } } } is completely valid but DBIC will insist on doing a JOIN even if you have a fully populated row object to call "search_related" on - to avoid the spurious JOIN, you must specify it with explicit LHS foreign cols as: on { +{ 'foreign.x' => 'self.x', 'foreign.y1' => { '<=', 'self.y' }, 'foreign.y2' => { '>=', 'self.y' }, } }
Visit the GSP FreeBSD Man Page Interface. |