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

Michael Lamertz mike at lamertz.net
Wed Jul 4 11:12:28 PDT 2007


Argh!  Ich grok es einfach nicht.  Ich sitz' jetzt seit Tagen (ok, immer
nur 'mal 'ne Stunde) ueber 'ner in SQL voellig trivialen Geschichte.

In DBIx::Class ist ja 'ne CD-Datenbank als Beispiel gewaehlt, und ich
baue mein Problem da einfach 'mal rein:

Angenommen, ich moechte zu den bestehenden Tables CD, Artist, Label,
wasauchimmer, noch 'ne Kategorie Genre einfuehren, wobei eine CD
durchaus mehrere Genres abdecken kann.

Dann hab' ich ja 'ne many_to_many Relationship zwischen Genre und CD,
und die realisier' ich ja ueber 'ne mapping-Table:


+-----+
|cd   |                         +-----+                      +-----+
+-----+                         |map  |                      |genre|
|id   | <------------+          +-----+                      +-----+
|title|              +--------- |cd   |            +-------> |id   |
|year |                         |genre| -----------+         |name |
|...  |                         +-----+                      +-----+
+-----+

Jetzt finde ich problemlos z.B. alle Techno-CDs von 1995 'raus, indem
ich sage

    SELECT cd.title FROM cd, map, genre where
        cd.year = 1997
        AND map.cd = cd.id
        AND map.genre = genre.id
        AND genre.name = 'Techno'

oder als Join formuliert:

    SELECT cd.title FROM cd
        JOIN map ON map.cd = cd.id
        JOIN genre ON map.genre = genre.id AND genre.name = 'Techno'
        WHERE cd.year = 1995;

Kann mir das bitte einmal jemand exemplarisch als
DBIx::Class-search-Statement geben?  Den ganzen belongs_to, has_many,
many_to_many-Kram hab' ich by the book aufgesetzt, aber many_to_many ist
ja laut doku eigentlich garkeine Relation, und ich bekomm' es einfach
nicht hin, egal wie ich es bisher gedreht habe :-/

Ich nehm' auch gerne einen Pointer in die Doku, obwohl ich die
mittlerweile rauf und runter gekaut habe.


Blaeh!

-- 
                 Michael Lamertz - Sandstr. 122 - 50226 Frechen
         M: +49 171 6900310 / T: +49 2234 204947 / F: +49 2234 4358725
           www.perl-ronin.de - www.fuss-und-hand.de - www.lamertz.net
      mlamertz at perl-ronin.de - michael at fuss-und-hand.de - mike at lamertz.net


More information about the Cologne-pm mailing list