首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Esqueleto中的特定ID更新行

使用Esqueleto中的特定ID更新行
EN

Stack Overflow用户
提问于 2017-10-03 19:25:20
回答 2查看 80关注 0票数 2

我可以在Esqueleto中用entryId更改一行字段,如下所示:

代码语言:javascript
复制
  update $ \entry -> do
    set entry [ EntryFoo =. val bar ]
    where_ (entry ^. EntryId ==. val entryId)

然而,写它的所有时间变得烦人。我希望能写出这样的东西:

代码语言:javascript
复制
  updateById entryId $ \entry ->
    set entry [ EntryFoo =. val bar ]

我试图自己编写这个助手,但是我发现我不知道如何以通用的方式编写^. EntryId (也就是一种适用于任何条目类型的方法)。有可能吗?还是我错过了一些东西,而updateById已经存在于Esqueleto中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-05 20:39:07

对于任何Entity^. EntityId都可以编写为^. persistIdField ( persistIdField字段是PersistEntity类的方法)。因此,您的函数可以这样编写:

代码语言:javascript
复制
updateById
  :: (E.PersistEntityBackend val ~ E.SqlBackend,
      MonadIO m, E.PersistEntity val)
  => Key val
  -> (E.SqlExpr (E.Entity val) -> E.SqlQuery a)
  -> E.SqlWriteT m ()
updateById entryId upd = E.update $ \entry -> do
  upd entry
  E.where_ (entry E.^. E.persistIdField ==. E.val entryId)
票数 1
EN

Stack Overflow用户

发布于 2017-10-03 20:13:48

我绝对不是esqueleto的专家,但我想:

代码语言:javascript
复制
updateById entryId upd = update $ \entry -> do
                           upd entry
                           where_ (entry ^. EntryId ==. val entryId)

应该解决问题。

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

https://stackoverflow.com/questions/46551936

复制
相关文章

相似问题

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