查看源代码 mix phx.gen.schema (Phoenix v1.7.14)

生成 Ecto 架构和迁移。

$ mix phx.gen.schema Blog.Post blog_posts title:string views:integer

第一个参数是架构模块,后面跟着它的复数名称(用作表名)。

上面生成的架构将包含

  • 一个架构文件位于 lib/my_app/blog/post.ex 中,其中包含一个 blog_posts
  • 一个用于仓库的迁移文件

生成的迁移可以使用 --no-migration 跳过。

上下文

您的架构可以生成并添加到一个单独的 OTP 应用中。确保您的配置正确设置,或者使用 CLI 中的 --context-app 选项手动指定上下文应用。

通过配置

config :marketing_web, :generators, context_app: :marketing

通过 CLI

$ mix phx.gen.schema Blog.Post blog_posts title:string views:integer --context-app marketing

属性

资源字段使用 name:type 语法给出,其中类型是 Ecto 支持的类型。省略类型会将其默认设置为 :string

$ mix phx.gen.schema Blog.Post blog_posts title views:integer

支持以下类型

  • :integer

  • :float

  • :decimal

  • :boolean

  • :map

  • :string

  • :array

  • :references

  • :text

  • :date

  • :time

  • :time_usec

  • :naive_datetime

  • :naive_datetime_usec

  • :utc_datetime

  • :utc_datetime_usec

  • :uuid

  • :binary

  • :enum

  • :datetime - :naive_datetime 的别名

生成器还支持引用,我们将在其中将给定的列与引用表的主键列正确关联

$ mix phx.gen.schema Blog.Post blog_posts title user_id:references:users

这将导致迁移创建一个包含 :integer 列的 :user_id 并创建一个索引。

此外,如果您的数据库支持数组类型,也可以给出数组类型,但需要给出底层数组元素的类型

$ mix phx.gen.schema Blog.Post blog_posts tags:array:string

可以使用以下方法自动生成唯一列

$ mix phx.gen.schema Blog.Post blog_posts title:unique unique_int:integer:unique

可以使用以下方法自动生成屏蔽列

$ mix phx.gen.schema Accounts.Superhero superheroes secret_identity:redact password:string:redact

可以使用以下方法生成 Ecto.Enum 字段

$ mix phx.gen.schema Blog.Post blog_posts title status:enum:unpublished:published:deleted

如果未给出数据类型,则默认为字符串。

table

默认情况下,迁移和架构的表名将是为资源提供的复数名称。要自定义此值,可以提供 --table 选项。例如

$ mix phx.gen.schema Blog.Post posts --table cms_posts

binary_id

生成的迁移可以使用 binary_id 作为架构的主键及其使用 --binary-id 选项的引用。

repo

生成的迁移可以使用 repo 来设置迁移存储库文件夹,使用选项 --repo

$ mix phx.gen.schema Blog.Post posts --repo MyApp.Repo.Auth

migration_dir

生成的迁移可以添加到特定的 --migration-dir 中,它设置迁移文件夹路径

$ mix phx.gen.schema Blog.Post posts --migration-dir /path/to/directory

prefix

默认情况下,迁移和架构在没有前缀的情况下生成。

对于 PostgreSQL,这将设置“SCHEMA”(通常通过 search_path 设置),而对于 MySQL,这将设置生成的迁移和架构的数据库。前缀可用于在数据库级别对您的表进行主题性组织。

可以使用 --prefix 标志指定前缀。例如

$ mix phx.gen.schema Blog.Post posts --prefix blog

警告

该标志不会生成创建架构/数据库的迁移。这需要手动或在单独的迁移中完成。

默认选项

此生成器使用应用程序的 :generators 配置中提供的默认选项。这些是默认值

config :your_app, :generators,
  migration: true,
  binary_id: false,
  timestamp_type: :naive_datetime,
  sample_binary_id: "11111111-1111-1111-1111-111111111111"

您可以通过提供相应的开关来覆盖每次调用的这些选项,例如 --no-binary-id 用于使用普通 id 而不是默认配置,或者 --migration 强制生成迁移。

UTC 时间戳

通过将 :timestamp_type 设置为 :utc_datetime,时间戳将使用 UTC 时区创建。这将导致一个 DateTime 结构,而不是一个 NaiveDateTime。这也可以设置为 :utc_datetime_usec 以实现微秒精度。