- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑到以下两个模型和 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
,我们可以按如下方式完成此任务
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 = ?)"
但是,鉴于我想维护 Haskell 和 SQL 之间的类型安全,我想使用 esqueleto 重写它。这是我正在努力解决的部分。通过阅读文档,sub_select似乎是这项工作的工具。这是我所拥有的:
getCommentsForArticle :: Slug -> App (Cmts [Comment])
getCommentsForArticle slug = do
comments <- E.select $
E.from $ \cmts -> do
let subQuery =
E.from $ \arts -> do
E.where_ $ arts ^. ArticleSlug ==. E.val slug
return (arts ^. ArticleId)
E.where_ $ cmts ^. CommentArticleId ==. E.sub_select subQuery
return cmts
return $ Cmts comments
我还注意到 in_ operator ,但我不知道如何使用它,也不知道它是否比 sub_select 更合适。 .
我错过了什么?语法正确吗?谢谢。
最佳答案
你会想要这样的东西
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
关于haskell - 如何使用 Esqueleto 执行 "SELECT ... IN (SELECT ...)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231255/
是否可以使用 esqueleto 进行以下查询? DELETE Table1 FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ItemID 我试
我对 Haskell 还很陌生,目前正在尽最大努力防止我的大脑从内到外。我以这种方式定义了一个非常简单的数据库架构: share [mkPersist sqlSettings, mkMigrate "
在所有示例中,我都看到了 esqueleto 的结果被投影到元组列表或 entities records . 例如: previousLogItems do orderBy [des
我的数据类型定义为: data ComitteeView = CommitteeView { committeeId :: CommitteeId
假设我有以下模型: Person stackOverflowUser Bool age Int Maybe 使用 Esqueleto(和 Yesod),假设我想获取 Stack Ove
如何在 Esqueleto 中select ... from (select ...) join (select ...)? 我知道我可以使用 Persistent 中的 rawSql,但我想避免这种
我有一个包含教师、学校和学区的数据库架构。 TEACHERS 表具有可为空的 SCHOOL_ID 列(教师可能属于也可能不属于学校),SCHOOLS 表具有可为空的 DISTRICT_ID 列(学校可
我正在尝试使用 Esqueleto(版本 2.1.2.1)计算内部联接的行数。不幸的是,我的代码无法编译,我不明白为什么。我查看了以下如何执行此操作的示例,但无法弄清楚我做错了什么:example1
我对外部连接如何与 esqueleto 一起工作感到有点困惑。 我创建了以下查询(简化): select $ from $ \(rep `LeftOuterJoin` event) -> do
selectDistinct 似乎对我不起作用,这可能是一个简单的错误。查询: info do E.on (rnd E.^. RoundId E.==. h E.^. HoleRo
对于这么简单的查询 runDb . select . from $ \cell -> do where_ $ cell ^. CellCode ==. val "x" return cell
我一直在研究 Persistent 库以与 sql 数据库交互。假设我有一个包含食谱的数据库,其中包含食谱、成分和 RecIng 表。 我(诚然有限)对持久性的理解使我相信我应该像这样定义表: sha
我正在尝试将以下 SQL 转换为 Esqueleto: SELECT id, task_id, author_id FROM scenario INNER JOIN ( SELECT task_id
我一直在遵循 Yesod 的 SQL Joins 中的示例,并且我想向 Inner Join 示例添加一个 where_ 子句 - 它应该仅显示作者 ID 大于 1 的博客。 我认为我的错误可能是我正
基本上可以归结为是否有可能在 esqueleto 中有一个返回超过 16 列的查询? 我有一个必须与之交互的遗留数据库,它需要连接具有 30-40 列的表,然后从可能的 80-100 列中挑选出我需要
如何让 esqueleto 从 from 语句生成 SQL 字符串? toRawSql 的文档说“您可以打开持久的查询日志记录”。我尝试了我能理解的所有可能的 MonadLogger 形式,但它从未打
考虑到以下两个模型和 GET/articles/:slug/comments 请求,我想根据文章的 slug 检索属于文章的评论. Article json sql=articles slug
我一直在尝试找出一种明智的方法来使用持久性在 SQL 后端中表示 Haskell 求和类型。 我的目标 Haskell 数据类型符合 data Widget = FooWidget Int | Bar
我怎样才能写作Database.Esqueleto以模块化方式进行查询,这样在定义“基本”查询和相应的结果集之后,我可以通过添加额外的内部联接和 where 表达式来限制结果集。 此外,如何将返回实体
来自脚手架站点中人为的config/models: Inventory name Text description Text Container name Te
我是一名优秀的程序员,十分优秀!