Выберите со списком ключей Persistent (Yesod)

Мне нужно получить список сущностей из списка ключей с помощью Persistent (Yesod)

Скажем, у меня есть Model и соответствующий ему ModelId. У меня с собой:

keys :: [ModelId]

и мне нужно получить

models :: [Model]

Текущий лучший способ сделать это, по-видимому, таков:

models' <- mapM get keys
models <- return $ Data.Maybe.catMaybes models'

Есть ли более эффективный способ сделать это? Ставит ли постоянный запрос в очередь запросы на выборку или выполняет их один за другим?

Тот же вопрос есть в yesod Permanent: получить список сущностей из списка ключей, но я хотел бы знать, является ли это наиболее эффективным способом сделать это.


person iamnat    schedule 30.05.2014    source источник
comment
Я не знаю, как yesod выполняет запросы, но вы можете упростить эту команду до models <- fmap catMaybes $ mapM get keys, чтобы у вас не было промежуточной переменной models'.   -  person bheklilr    schedule 30.05.2014


Ответы (1)


Если я хорошо понял ваш вопрос, вы можете добиться этого, попробовав что-то вроде этого:

models' <- selectList [ModelId <-. keys] []

Используя mapM, вы будете запрашивать базу данных length keys раз, а selectList выполняет один запрос.

person ms.    schedule 30.05.2014
comment
Ах. Спасибо. Не знал, что могу использовать ModelId для выбора моделей. - person iamnat; 31.05.2014