查看源代码 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
以实现微秒精度。