[Cologne-pm] DBIx::Class joins?!?

ReneeB mailinglisten at renee-baecker.de
Thu Jul 5 02:55:01 PDT 2007


Das hier sollte gehen:


my @techno = $schema->resultset( 'Cd' )->search(
    {
      'genre.name' => 'Techno',
    },
    {
      join => {
          cd_genre => 'genre'
             
      }
    }
);


Michael Lamertz wrote:
> On Thu, Jul 05, 2007 at 09:29:34AM +0200, Tobias Kremer wrote:
>   
>> Hi Michael,
>>
>> versuch das mal:
>>
>>     
>>> ---------- Schema/Cd.pm ----------
>>> package Schema::Cd;
>>> __PACKAGE__->has_many( cd_genre => 'Schema::CdGenre', 'genre' );
>>> __PACKAGE__->many_to_many( 'cds' => 'cd_genre', 'cd' );
>>>       
>> __PACKAGE__->has_many( cd_genre => 'Schema::CdGenre', 'cd' );
>> __PACKAGE__->many_to_many( 'genres' => 'cd_genre', 'genre' );
>>     
>
> OENK!  Danke!
>
> Das hatte ich aber bei meinen bisherigen Versuchen durchaus richtig.
>
>   
>> # Alle CDs im Genre "Techno":
>> my $genre = $schema->resultset( 'Genre' )->find( { name => 'Techno' } );
>> my @cds = $genre->cds();
>> print $_->name for @cds;
>>
>> Hoffe, es funktioniert und hilft Dir weiter!
>>     
>
> Naja, die 2-Step-Loesung tat schon eine ganze Weile, aber ich suche ja
> nach der Syntax fuer einen Join.
>
> Wenn wir zurueck zum 1. Beispiel gehen und im Schema noch das Feld
> 'year' einbauen, dann ist Deine Loesung
>
> @cds = $genre->cds->search( { year => '2006' } );
>
> Aber wie gesagt, mir geht's 'drum, das DBIx-Join zu kapieren.
>
> Das Object-Mapping ist zwar echt nett, aber diese Suchsyntax... ich kann
> im Moment garnicht soviel fressen wie ich kotzen moechte...
>
>   


-- 
*) $foo - Perl-Magazin: http://foo-magazin.de
*) my Perl-Blog: http://reneeb-perlblog.blogspot.com



More information about the Cologne-pm mailing list