尝试使用我的模型设置 Esqueleto 时出错
Posted
技术标签:
【中文标题】尝试使用我的模型设置 Esqueleto 时出错【英文标题】:Error trying to setup Esqueleto with my models 【发布时间】:2014-10-15 14:20:10 【问题描述】:今天早上我开始在 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)
【问题讨论】:
dunno 是否有帮助,但我在我的玩具 learn-yesod 项目中使用 esquelito,这里:github.com/bburdette/hackstarter/blob/master/Handler/Project.hs 我认为它使用 esquelito 1.4 或其他东西(在 nixos 上编译所以可能有点奇怪的包版本)。 【参考方案1】:您需要更改函数签名。
findEntries :: SqlPersistT Handler [(Entity UrlEntry, Entity UrlEntryData)]
【讨论】:
以上是关于尝试使用我的模型设置 Esqueleto 时出错的主要内容,如果未能解决你的问题,请参考以下文章
尝试拟合 ARIMA 模型时 xy.coords 出错,请告知