Die korrekte Art, einen "Join" zu machen, bleibt bei yesod bestehen

8

Betrachten Sie die Modelle:

%Vor%

und die Funktion

%Vor%

Wie sollte man alle Player-Namen für jede der zugehörigen Sitzungen abrufen?

machen

%Vor%

ruft die Liste der Spieler auf; aber es ist überhaupt nicht mit den Sitzungen verbunden

    
geoff 19.03.2012, 23:06
quelle

2 Antworten

6

Zu diesem Zeitpunkt gibt es eine begrenzte Join-Unterstützung in persistent, und ich glaube, es ist nur SQL.

Ich habe ein paar Helfer, die ich für einfache Fälle benutze. Sie können hier gefunden werden. Es ist kein echtes JOIN, es wählt einmal pro Tabelle aus und erstellt dann eine Liste von Tupeln, die "verbundene" Zeilen mit jeweils einem Element darstellen.

Wenn Sie Ihre Modelle und diesen Helfer verwenden, sollten Sie Folgendes tun können:

%Vor%

Nur Fälle, in denen ein Datensatz in allen drei Tabellen vorhanden ist, werden zurückgegeben (es handelt sich also um einen INNEREN JOIN), aber Sie möchten möglicherweise auch die Effizienz vorab filtern.

    
pbrisbin 20.03.2012, 00:07
quelle
2

Für zukünftige Referenz, für SQL können Sie esqueleto oder rawSQL Joins tun - siehe diese Antwort Verwirrt von selectOneMany in Yesod

Wenn Sie einen Join verwenden wollten, würde Ihre Abfrage in etwa so aussehen:

%Vor%

Dies würde ein (Entity GamingSession, PlayerId) Tupel zurückgeben

    
unohoo 17.07.2014 21:33
quelle

Tags und Links