[Dbix-class] Extended JOIN syntax

Bernhard Graf dbic4 at augensalat.de
Sun Jan 29 20:21:19 GMT 2012


Am 29.01.2012 20:42, schrieb Bernhard Graf:

> The example above still requires the bind values to be defined
> statically in the schema. I couldn't find any examples, about how to
> specify bind values at execution time - e.g. likes this:
>
> My::Schema::Artist->has_many(
> cds_era => 'My::Schema::CD',
> sub {
> my $args = shift;
>
> return {
> "$args->{foreign_alias}.artist" => { -ident =>
> "$args->{self_alias}.artistid" },
> "$args->{foreign_alias}.year" => { '>', \'?', '<', \'?' },
> };
> }
> );
>
> ...
>
> $artist_rs->search_related('cds_era', {}, {bind => ['1979', '1990'])->next;
>
>
> Isn't something like this possible?

Actually it does somehow!
Caveat: { '>', \'?', '<', \'?' } is a hash ref und so the elements 
appear in a random order, which is probably not the same as in the 
bind-array. :-(

At least it works for this case:

My::Schema::Artist->has_many(
   cds_year => 'My::Schema::CD',
   sub {
     my $args = shift;

     return {
       "$args->{foreign_alias}.artist" => {-ident => 
"$args->{self_alias}.artistid"},
       "$args->{foreign_alias}.year"   => {-ident => '?'},
     };
   }
);

$artist_rs->search_related('cds_year', {}, {bind => ['1990']})->next;


Bernhard



More information about the DBIx-Class mailing list