考虑到以下两个模型和let celloffset = UserDefaults.standard.integer(forKey: "celloffset")
if celloffset != 0{
let index = IndexPath(item: celloffset, section: 0)
self.tableView.scrollToRow(at: index, at: UITableViewScrollPosition.middle, animated: false)}
请求,我想基于其GET /articles/:slug/comments
检索属于文章的评论。
slug
使用持久性Article json sql=articles
slug Slug
title Text
description Text
body Text
createdAt UTCTime default=now()
updatedAt UTCTime Maybe default=NULL
userId UserId
UniqueSlug slug
Comment json sql=comments
body Text
createdAt UTCTime default=now()
updatedAt UTCTime Maybe default=NULL
articleId ArticleId
userId UserId
,我们可以按如下方式完成此操作
rawSql
但是,鉴于我想维护Haskell和SQL之间的类型安全,我想使用getCommentsForArticle :: Slug -> App (Cmts [Entity Comment])
getCommentsForArticle slug = do
comments <- runDb $ rawSql stm [toPersistValue slug]
return (Cmts comments)
where stm = "SELECT ?? FROM comments \
\WHERE article_id IN (\
\SELECT id FROM articles WHERE slug = ?)"
重写它。这是我正在努力的部分。通过阅读文档,sub_select似乎是工作的工具。这就是我所拥有的:
esqueleto
我也注意到in_ operator,但我无法弄清楚如何使用它,也不知道它是否比sub_select更合适。
我错过了什么?语法是否正确?感谢。
答案 0 :(得分:0)
你想要这样的东西
getCommentsForArticle slug = do
c <- select $ from $ \cmts -> do
let a = subList_select from $ \arts -> do
where_ $ arts ^. ArticleSlug ==. val slug
return $ arts ^. ArticleId
where_ $ cmts ^. CommentArticleId `in_` a
return cmts
return $ Cmts c