据我了解,Database.Persist
不会处理任何自动更新的字段(Yesod Book Persistent)。
但是存在一个与之相关的特殊情况(至少对我而言:P)是lastUpdate :: UTCTime
字段(我喜欢它,并且我广泛用于了解数据更改)。
另外,此更新必须在数据库级别执行(如果没有,则所有服务器都应完全同步(这是困难而脆弱的),并且记录更新应在事务内部完成,以在其中包含getTime
系统调用[无效])。
我当前的解决方法是(手动)创建触发器。
您知道更好的方法吗?
谢谢!
最佳答案
由于这似乎对您很重要,因此依赖数据库的now()
是最安全的,因为这将始终使用事务的开始作为返回值。如果您在应用程序本身中计算时间,则必须非常小心地在各处传递相同的值。
您可以研究Haskell的esqueleto库来编写sql,这样您总是会对set
列进行附加的lastUpdate
调用。我认为它当前不公开sql now()
函数,因此您可能希望将其自己添加到lib中。