我可以在Esqueleto中用entryId更改一行字段,如下所示:
update $ \entry -> do
set entry [ EntryFoo =. val bar ]
where_ (entry ^. EntryId ==. val entryId)然而,写它的所有时间变得烦人。我希望能写出这样的东西:
updateById entryId $ \entry ->
set entry [ EntryFoo =. val bar ]我试图自己编写这个助手,但是我发现我不知道如何以通用的方式编写^. EntryId (也就是一种适用于任何条目类型的方法)。有可能吗?还是我错过了一些东西,而updateById已经存在于Esqueleto中?
发布于 2017-11-05 20:39:07
对于任何Entity,^. EntityId都可以编写为^. persistIdField ( persistIdField字段是PersistEntity类的方法)。因此,您的函数可以这样编写:
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)发布于 2017-10-03 20:13:48
我绝对不是esqueleto的专家,但我想:
updateById entryId upd = update $ \entry -> do
upd entry
where_ (entry ^. EntryId ==. val entryId)应该解决问题。
https://stackoverflow.com/questions/46551936
复制相似问题