我正在尝试根据其他列更新表的列,但看起来我无法使用 updateWhere 函数来完成。所以我尝试使用 rawSQl 但由于类型错误而无法正常工作。
getCalculateDeltaR :: personId -> Handler Html
getCalculateDeltaR personId = do
goods <- runDB $ selectList [GoodPerson ==. personId] []
forM goods $ \(Entity gid good) -> do
let aid = goodAsset good
asset <- runDB $ get404 aid
let mktValue = assetMktValue asset
runDB $ rawSql "UPDATE good SET delta = (? - orig_value) \
WHERE person = ? AND asset = ?"
[toPersistValue mktValue, toPersistValue personId, toPersistValue aid]
defaultLayout $ do
$(widgetFile "calculateDelta")
我收到以下错误,我确实尝试添加 ?? 更新后,但没有任何区别。
Ambiguous type variable `a0' in the constraint:
(RawSql a0) arising from a use of `rawSql'
Probable fix: add a type signature that fixes these type variable(s)
In the second argument of `($)', namely
`rawSql
...
...
我可以传递给 rawSQL 的参数定义明确,所以不确定是什么导致了这个问题。有人可以告诉我应该如何解决上述问题吗?如果有更好的方法来更新基于其他列的列,我也很想知道这一点。
谢谢!