今天早上,我开始在Yesod应用程序中设置Esqueleto。我真的在尝试做一个LeftOuterJoin,但我已经简化了查询相当多,以便让基本的工作。我甚至都搞不懂。为了确保不会与Database.Persist.Query发生冲突,我遵循了一些advice from a Github issue将查询提取到不导入Yesod的单独文件中。在配置Esqueleto时,我是否遗漏了什么?
FWIW,我使用的是Yesod 1.4.0,Persistent 2.1和Esqueleto 2.1。
这是我遇到的错误:
Queries.hs:9:15:
No instance for (Database.Esqueleto.Internal.Sql.SqlSelect
(SqlExpr (Entity UrlEntry), SqlExpr (Entity UrlEntryData))
(Entity UrlEntry))
arising from a use of ‘select’
In the expression: select
In the expression:
select
$ from
$ \ (entry `InnerJoin` entryData)
-> do { on
$ entry ^. UrlEntryId ==. entryData ^. UrlEntryDataUrlEntryId;
return (entry, entryData) }
In an equation for ‘findEntries’:
findEntries
= select
$ from
$ \ (entry `InnerJoin` entryData)
-> do { on
$ entry ^. UrlEntryId ==. entryData ^. UrlEntryDataUrlEntryId;
.... }以下是我的模型:
UrlEntry
url String
shortCode String
ShortCode shortCode
visits Int default=0
userId UserId Eq
deriving Eq Show
UrlEntryData
screenshot String Maybe
title String Maybe
favicon String Maybe
contentType String
urlEntryId UrlEntryId Eq
deriving Eq Show
User
email Text
password Text Maybe
verkey Text Maybe
verified Bool
UniqueUser email
deriving Eq Show Typeable下面是我的问题:
findEntries :: SqlPersistT Handler [Entity UrlEntry]
findEntries = select $ from $ \(entry `InnerJoin` entryData) -> do
on $ entry ^. UrlEntryId ==. entryData ^. UrlEntryDataUrlEntryId
-- where_ (entry ?. UrlEntryUserId ==. valkey authId)
return (entry, entryData)发布于 2014-11-01 22:43:14
您需要更改函数签名。
findEntries :: SqlPersistT Handler [(Entity UrlEntry, Entity UrlEntryData)]https://stackoverflow.com/questions/26384924
复制相似问题