首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >esqueleto:外部联接不编译

esqueleto:外部联接不编译
EN

Stack Overflow用户
提问于 2018-01-16 13:49:15
回答 1查看 86关注 0票数 1

下面是我的模型的一个子集:

代码语言:javascript
复制
ServerWebsite
    desc Text
    url Text
    text Text
    username Text
    password Password
    serverDatabaseId ServerDatabaseId Maybe
    groupName Text Maybe
    serverId ServerId
    deriving Show Typeable
ServerDatabase
    desc Text
    name Text
    text Text
    username Text
    password Password
    groupName Text Maybe
    serverId ServerId
    deriving Show Typeable

我无法构建这个查询:

代码语言:javascript
复制
filterServerWebsites :: SqlExpr (Value Text) -> SqlPersistM [Entity ServerWebsite]
filterServerWebsites query = select $ from $ \(w `LeftOuterJoin` db) -> do
    on (w ^. ServerWebsiteServerDatabaseId ==. db ?. ServerDatabaseId)
    where_ ((w ^. ServerWebsiteDesc `like` query)
        ||. (w ^. ServerWebsiteUrl `like` query)
        ||. (w ^. ServerWebsiteText `like` query)
        ||. (db ?. ServerDatabaseDesc `like` just query))
    return w

我不明白构建错误:

代码语言:javascript
复制
    • Couldn't match expected type ‘SqlQuery a1’
                  with actual type ‘(a0 -> b0) -> a0 -> a0 -> c0’
    • Probable cause: ‘on’ is applied to too few arguments
      In a stmt of a 'do' block:
        on (w ^. ServerWebsiteServerDatabaseId ==. db ?. ServerDatabaseId)

以及:

代码语言:javascript
复制
    • Couldn't match expected type ‘b0 -> b0 -> c0’
                  with actual type ‘SqlExpr (Value Bool)’
    • Possible cause: ‘(==.)’ is applied to too many arguments
      In the first argument of ‘on’, namely
        ‘(w ^. ServerWebsiteServerDatabaseId ==. db ?. ServerDatabaseId)’

我不明白我哪里出了问题?

编辑i是从这段代码开始的,它可以工作:

代码语言:javascript
复制
filterServerWebsites :: SqlExpr (Value Text) -> SqlPersistM [Entity ServerWebsite]
filterServerWebsites query = select $ from $ \w -> do
    where_ ((w ^. ServerWebsiteDesc `like` query)
        ||. (w ^. ServerWebsiteUrl `like` query)
        ||. (w ^. ServerWebsiteText `like` query))
    return w
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-16 18:53:56

正确的。所以真的是我的愚蠢。我应该做一个样本项目来重现这个问题,然后我就会发现这个问题。

问题是我在文件的顶端..。

代码语言:javascript
复制
import Database.Esqueleto hiding (on)
import Data.Function

..。因为我在文件on中使用了来自Data.Function的其他地方。

我把它改成..。

代码语言:javascript
复制
import Database.Esqueleto
import qualified Data.Function as F

现在一切正常..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48282779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档