问题标签 [haskell-persistent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
163 浏览

haskell - 使用持久生成的类型定义自定义类型

我相信这个问题与 Haskell 结构本身的关系比 Persistent 的更重要,但是我一直在查看一些问题,我偶然发现了这个

现在,我想知道,有没有办法在通过生成mkPersist的自定义类型中使用生成的类型derivePersistField?现在,采取以下措施,

问题是,Extra需要在Model中导入,没问题;但是,如果我要在类型内部RegularId使用Regular表格中的,Person

我还需要在 Extra 中导入模型,这会导致导入周期。

有没有办法解决这个问题并实现我的目标?排除将所有内容放在同一个模块中的可能性,因为它会给我带来 GHC 阶段限制。我也考虑过使用{-# SOURCE #-}和 hs-boot,但由于某种原因,堆栈仍然抱怨导入周期,而是使用 hs-boot 文件。

0 投票
2 回答
153 浏览

haskell - Yesod 插入后返回整个实体?

基本上现在我跑fbId <- runDB $ insert myNewFooBar了,我得到了一个Key FooBar. FooBar有什么方法可以直接从插入返回整个值,而无需运行单独的runDB $ get404 fbIdafter 查询?

0 投票
1 回答
90 浏览

haskell - 如何在 Yesod 中获取引用的模型信息?

我有 3 个模型

我想访问所有的房子。我可以通过这样做

但我只参考其他实体,如person & address.

我想获得房屋的完整信息,这意味着,解决这个问题ownerId & addressId并发送可能看起来像的数据,

有什么方法可以getForiegnData向查询中添加信息,并且可以获取所有这些信息吗?或任何其他解决方案?

0 投票
1 回答
59 浏览

haskell - Haskell生成实体时如何设置列映射关系?

我正在尝试使用 Persistent 访问我的数据库。我知道 Persistent 可以生成实体的代码,但是有些东西我不能那么容易生成。就像我有一张看起来像这样的桌子:

然后我的haskell代码如下:

这些字段不同包括主键,我要设置它们的映射关系。官方页面(https://www.yesodweb.com/book/persistent)没有说明如何做。

我需要编写代码来定义它而不是生成它吗?

0 投票
1 回答
259 浏览

postgresql - 使用 PostGreSQL 和 Persistent 将条目插入数据库

我正在尝试学习持久库。

我有两个文件,其中一个包含我为项目定义的所有类型(饮食跟踪器)


和另一个用于生成表格的文件


和一个处理迁移的文件

在我调用的[ProjectName.hs]文件中main

对于最后一种情况,我想将用户条目添加到数据库中。

我还有一个使用searchReport, s&np返回Report类型的函数。

我想做这样的事情


但是(AFAIK)有两个问题

  1. 的类型与我可以编写一个将一个转换为另一个的函数Report.FoodEntry的类型不匹配, Storage.FoodEntry但我想知道是否有更好的方法来做到这一点。

  2. 如果我要像这样测试那个 do 块中的函数

    我收到错误

    /li>
0 投票
1 回答
224 浏览

haskell - 持久 - 如何过滤记录列的字段

我正在尝试构建我的第一个“真正的”Haskell 应用程序,这是一个使用 Servant 的 API,我在其中使用 Persistent 作为数据库后端。但是我在尝试使用 Persistent 进行某种类型的数据库查询时遇到了问题。

我真正的问题当然要涉及更多,但我遇到的问题的本质可以这样解释。我有一个记录类型,例如:

我将其包含在这样的实体中:

而且我需要能够在我的数据库中查询其 Foo 值的a字段大于aMin提供的字段的项目。(目的是它实际上将由 API 请求在查询字符串中提供。)

对于普通查询,比如说一个Int字段Bar,我可以简单地做selectList [ThingBar >=. aMin] [],但是我在过滤器列表中放置什么以便从记录中提取字段并与之进行比较。尽管这感觉像是 Haskell 应该能够轻松完成的事情。感觉这里应该有一个Functor我可以只fmap使用a访问器的方法,但是据我从文档和教程中可以看出,相关类型是EntityField Thing由 GADT 定义的(实际上是由 Template Haskell 从share上面的调用中生成的),在这种情况下,它只有一个构造函数产生一个EntityField Thing Foo,似乎不可能从中创建一个Functor实例。

但是没有这个,我对如何处理这个问题持空白,因为像这样的组合器的 LHS>=.必须是一个EntityField值,这阻止了我在比较之前尝试将函数应用于数据库值。

因为我知道有人会这么说(你们中的大多数人都会这么想)——是的,在这个玩具示例中,我可以轻松地将aandb放入我的数据库表中的单独字段中,并以这种方式解决问题。正如我所说,这在某种程度上被简化了,在我的实际应用程序中,由于多种原因,这样做会让人感到不满意。它并没有解决我更广泛的问题,即如何在查询之前对数据进行任意转换。[编辑:我现在采用这种方法,以推进我的项目,但正如我所说,这并不完全令人满意,我仍在等待我的一般问题的答案——即使那只是“对不起不可能”,正如我越来越怀疑的那样,我希望得到一个很好的解释。]

我开始怀疑这可能根本是不可能的,因为数据最终存储在 SQL 数据库中,而 SQL 根本不像 Haskell 那样具有表现力 - 但我正在尝试做的事情,至少对于记录类型(我承认我不知道如何derivePersistField将这些编组为 SQL 数据类型)似乎不太合理,所以我觉得我应该问是否有任何解决方法,或者如果我真的需要将我的记录分解成一堆单独的字段单独查询它们。

[如果有任何其他库可以提供帮助,请随时推荐它们——我确实研究了 Esqueleto,但决定我在这个项目中不需要它,尽管那是在我遇到这个问题之前。这对这种查询有帮助吗?]

0 投票
1 回答
85 浏览

haskell - 如何使用 yesod-persistent 创建单列列表?

给定一个用户,我试图选择与该用户所在的组织相关的事件列表。UserOrg 表描述了哪些 OrgId 对应于给定的 UserId。

我有这些表:

目前我正在尝试这个:

但是我收到一个类型错误,说 userOrgIds 的返回返回 a[[OrgId]]而不是[OrgId],并且 concat 在这里不起作用

我要解决这个问题了吗?我应该rawQuery在这种情况下使用吗?

0 投票
2 回答
617 浏览

postgresql - Haskell 和 postgresql - 构建错误“程序 pg_config 是必需的,但找不到。”

我目前正在学习haskell,只是尝试使用postgresql作为数据库。 我使用堆栈( -> -> )
生成了我的项目,然后我所做的只是将持久性和 postgresql 所需的依赖项添加到 package.yaml 文件(在“依赖项:”下)。 这些都是:stack new <name>stack setupstack build

  • 执着的
  • 持久化-postgresql
  • 持久模板

然而,这会导致构建失败并显示以下消息:
postgresql-libpq > setup.exe: The program 'pg_config' is required but it could not be found。
postgresql-libpq >
-- 在构建包 postgresql-libpq-0.9.4.2 时使用:C:\Users\\AppData\Local\Temp\stack14388\postgresql-libpq-0.9.4.2.stack-work\dist\e626a42b\setup\setup --builddir =.stack-work\dist\e626a42b 配置 --user --package-db=clear --package-db=global --package-db=C:\sr\snapshots\365a3dde\pkgdb --libdir=C:\ sr\snapshots\365a3dde\lib --bindir=C:\sr\snapshots\365a3dde\bin --datadir=C:\sr\snapshots\365a3dde\share --libexecdir=C:\sr\snapshots\365a3dde\libexec - -sysconfdir=C:\sr\snapshots\365a3dde\etc --docdir=C:\sr\snapshots\365a3dde\doc\postgresql-libpq-0.9.4.2 --htmldir=C:\sr\snapshots\365a3dde\doc\ postgresql-libpq-0.9.4.2 --haddockdir=C:\sr\snapshots\365a3dde\doc\postgresql-libpq-0.9.4.2 --dependency=Cabal=Cabal-2.4.1.0-5rQrtDcYhR2LOcYye7obEr --dependency=Win32=Win32- 2.6.1.0 --dependency=base=base-4.12.0。0 --dependency=bytestring=bytestring-0.10.8.2 -f-use-pkg-config --extra-include-dirs=C:\Users\\AppData\Local\Programs\stack\x86_64-windows\msys2-20180531\ mingw64\include --extra-lib-dirs=C:\Users\\AppData\Local\Programs\stack\x86_64-windows\msys2-20180531\mingw64\lib --extra-lib-dirs=C:\Users\\ AppData\Local\Programs\stack\x86_64-windows\msys2-20180531\mingw64\bin --exact-configuration --ghc-option=-fhide-source-paths 进程退出,代码:ExitFailure 1\Users\\AppData\Local\Programs\stack\x86_64-windows\msys2-20180531\mingw64\bin --exact-configuration --ghc-option=-fhide-source-paths 进程退出,代码:ExitFailure 1\Users\\AppData\Local\Programs\stack\x86_64-windows\msys2-20180531\mingw64\bin --exact-configuration --ghc-option=-fhide-source-paths 进程退出,代码:ExitFailure 1



有谁知道如何解决这个问题以及它为什么会发生?
我是否必须安装 postgresql 才能运行构建项目?如果是这样,当数据库基本上可以无处不在时,您将如何在生产中执行此操作?

0 投票
2 回答
85 浏览

haskell - 无法将类型“PersistEntityBackend U”与“SqlBackend”匹配

0 投票
1 回答
154 浏览

database - Haskell 持久化 - 通过外键获取价值

假设我有一个非常简单的带有外键的数据库(为简单起见:一个带有自引用的表;上下文 - 对金融工具进行建模):

然后我可以通过执行获取所有行:

我注意到我可以使用自动生成的函数从结果中提取特定字段,例如

但是,当我尝试引用通过外键引用的值时,我得到:

我的问题:如何引用与收到的“关键工具”相对应的剩余值,例如如何获取引用记录的“名称”字段?

编辑:

我试过写一个子查询,但到目前为止还不好。我尝试的是:

如何在我的子查询中正确使用“Key Instrument”参数?