Considerare i modelli:modo corretto di fare un "join" a persistere con Yesod
Player
name Text
nick Text
email Text Maybe
phone Text Maybe
note Textarea Maybe
minutes Int Maybe
deriving
Table
name Text
game Text
pointsHour Int
seats Int Maybe
description Text Maybe
deriving
GamingSession
start UTCTime
end UTCTime Maybe
player PlayerId
table TableId
seat Int Maybe
deriving
e la funzione
getGamingSessionsR :: Handler RepHtml
getGamingSessionsR = do
sessions <- runDB $ selectList [GamingSessionEnd ==. Nothing] [Desc GamingSessionTable]
defaultLayout $(widgetFile ("opensessions"))
come si potrebbe fare per ottenere tutti i nomi dei giocatori per ognuna delle le sessioni associate?
facendo
players <- runDB $ selectList [FilterOr . map (\(Entity _ s) -> PlayerId ==. (GamingSessionPlayer s)) $ sessions] []
ottiene la lista dei giocatori; ma non è associato a tutte le sessioni
Abbiamo il supporto per un join 1-to-many, ed è implementato sia in termini di join di SQL che di join di un'applicazione, quindi può funzionare sia per SQL o backend NoSQL. È scarsamente documentato in questo momento, ma spero che possa essere affrontato presto. –
Non penso che fare un join in Haskell, cosa che un RDBMS dovrebbe fare in primo luogo, può essere considerato una risposta accettabile. Soprattutto per il mondo/comunità che Haskell abita. –