Haskell Persistent:可以按包含指定值的字段选择所有行

Posted

技术标签:

【中文标题】Haskell Persistent:可以按包含指定值的字段选择所有行【英文标题】:Haskell Persistent: Is possible to select all rows by field that contains specified value 【发布时间】:2015-01-23 20:13:53 【问题描述】:

我有以下持久模型

Tag
    name String
    description String
    UniqueName name

Post
    caption String
    text    String
    created UTCTime
    tags    [TagId]
    deriving Show

是否可以在字段tags 中选择包含指定TagId 的所有帖子?或者我需要创建新模型来处理多对多关系?

PS 对不起我的英语不好

【问题讨论】:

【参考方案1】:

不,因为类似列表的列不是 SQL 的一部分。

实际上,您的 tags 列在 SQLite 中定义为 "tags" VARCHAR NOT NULL

如果您想在 Post 上运行任何类型的重要查询,如您所说,我强烈建议您重新设计架构。

Post 中删除tags 并添加下表应该允许您获取特定标签的所有帖子。

TagPost
    tagId TagId
    postId PostId
    UniqueTagPost tagId postId

λ> tagPosts <- selectList [TagPostTagId ==. yourTagId] []

您可能还想看看Esqueleto,它将允许您编写类型安全的连接(persistent 默认不提供的东西,因为它必须与 MongoDB 保持兼容)。

【讨论】:

以上是关于Haskell Persistent:可以按包含指定值的字段选择所有行的主要内容,如果未能解决你的问题,请参考以下文章

Haskell Persistent Library - 如何从我的数据库中获取数据到我的前端?

使用 Persistent Haskell 来自现有数据库的外键

“类型变量不明确”在 Haskell Yesod 中使用 Persistent

Haskell Persistent 上的 CRUD 模式

Haskell的Persistent sometmes返回500内部服务器错误

使用 Persistent 输入与数据库的关系