使用现有的答案,我花了一些时间来弄清楚如何使用删除级联。作为 Yesod 的初学者,我对 Yesod 没有一个概览。
要获得有效的删除级联,您无需更改模型中的任何内容。假设您的实体文件如下所示,并且您想要删除Entry
.
Entry
title Text
Comment
entry EntryId
您不必更改此实体文件。
您引导实体的代码(通常位于 中Model.hs
)看起来像这样。
share [ mkPersist sqlOnlySettings
, mkMigrate "migrateAll" ]
$(persistFileWith lowerCaseSettings "config/models")
添加 mkDeleteCascade 以获取实体的 DeleteCascades 实例。
share [ mkPersist sqlOnlySettings
, mkDeleteCascade sqlOnlySettings
, mkMigrate "migrateAll" ]
$(persistFileWith lowerCaseSettings "config/models")
一旦您想删除您的条目,例如在postDeleteEntryR
处理程序中,您必须使用deleteCascade
或deleteCascadeWhere
代替删除。
runDB $ deleteCascade entryId
使用delete
与之前的效果相同。