![](/img/trans.png)
[英]What is a correct way of doing COUNT(id) in Esqueleto and Yesod
[英]Update a row with specific ID in Esqueleto
我可以使用entryId
中的entryId更改行的字段,如下所示:
update $ \entry -> do
set entry [ EntryFoo =. val bar ]
where_ (entry ^. EntryId ==. val entryId)
但是,一直寫它會很煩人。 我希望能夠編寫如下內容:
updateById entryId $ \entry ->
set entry [ EntryFoo =. val bar ]
我試圖自己寫這個助手,但是發現我不知道怎么寫^. EntryId
^. EntryId
以通用方式(即適用於任何條目類型的方式)。 可能嗎? 還是我錯過了一些東西,而updateById
已經存在updateById?
我絕對不是esqueleto的專家,但我會猜測:
updateById entryId upd = update $ \entry -> do
upd entry
where_ (entry ^. EntryId ==. val entryId)
應該解決問題。
對於任何Entity
, ^. EntityId
^. EntityId
可以寫為^. persistIdField
^. 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.