Say, in Yesod/Persistent, I have models setup like so:
User
ident Text
password Text Maybe
UniqueUser ident
Question
title Text
asker UserId Eq
And I have a list of Question
s, and would like to retrieve the corresponding list of User
s. How would I go about doing this?
I've thought about joins, but those are one-to-many, not one-to-one (I suppose it doesn't matter, but I'd like a simpler solution). Manually doing the join is also an option, but I'm worried about performance - I have
questions <- runDB $ selectList [QuestionTitle !=. ""] [LimitTo 10]
let askerIds = map (\(Entity _ q) -> questionAsker q) questions
askers <- sequence $ map (runDB . get) askerIds
let questionsAndAskers = zip questions askers
but I'm worried about using runDB
in the map
(wouldn't it make a separate request to the database for each user?)
Is there a better/more idiomatic way to achieve this?