我正在为我的 user
定义模式和 role
Phoenix应用程序中的模型。角色has_many
用户和用户 belongs_to
一名角色。似乎有 3 种不同的 on_delete:
选项:nilify_all
, nothing
(默认)和 delete_all
.
当我看 Ecto.Schema页面,我真的没有找到每个人做什么的定义。nilify_all
有什么区别, nothing
, 和 delete_all
- 我应该什么时候使用?
最佳答案
on_delete
选项指定删除记录时关联记录应发生的情况。
考虑您的示例,其中 role
有很多users
:
delete_all
:删除父记录时删除关联的记录。例如在您的情况下删除 role
将删除所有 users
与该角色相关联的。 nilify_all
:这将关联表中指向父记录的键设置为 nil
当父记录被删除时。例如,当一个角色被删除时,这将设置 role_id
在 users
表到nil
属于该角色的用户。 nothing
:当删除父记录时,这不会对关联的记录做任何事情。但是,如果关联表具有返回父表的外键约束,这将引发错误。 关于schema - nilify_all、nothing 和 delete_all 之间的 Ecto.Schema 差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53092817/