schema - nilify_all、nothing 和 delete_all 之间的 Ecto.Schema 差异?

标签 schema ecto phoenix

我正在为我的 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_idusers表到nil属于该角色的用户。
  • nothing :当删除父记录时,这不会对关联的记录做任何事情。但是,如果关联表具有返回父表的外键约束,这将引发错误。
  • 关于schema - nilify_all、nothing 和 delete_all 之间的 Ecto.Schema 差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53092817/

    相关文章:

    elixir - 带有多个 'or' 子句的 Ecto Repo.get_by

    HBase集群-无法通过 Phoenix 客户端连接到hbase

    hadoop - Phoenix-Spark API是否具有像HBase API这样的checkAndPut方法?

    mysql - 如何从架构中的每一列获取示例值

    elixir - Ecto.Queryable 未针对用户/Phoenix 错误实现

    postgresql - Postgrex - 主机 "xxx.xxx.xxx.xxx"没有 pg_hba.conf 条目

    csv - Phoenix 通过上传批量csv文件的命令不明白吗?

    sql-server - DBCC CHECKIDENT——模式感知?

    mysql - RDBMS - 无法弄清楚将该表放置在哪里

    sql - 一个奇怪的 CREATE EXTENSION WITH postgres 错误