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

生成一个包含 Ecto 架构相关函数的上下文。

$ mix phx.gen.context Accounts User users name:string age:integer

第一个参数是上下文模块,后面跟着架构模块及其复数名称(用作架构表名称)。

上下文是一个 Elixir 模块,作为给定资源的 API 边界。上下文通常包含许多相关资源。因此,如果上下文已经存在,它将使用给定资源的函数进行扩展。

注意:资源也可以跨不同的上下文分割(例如 Accounts.User 和 Payments.User)。

架构负责将数据库字段映射到 Elixir 结构。

总的来说,这个生成器将以下文件添加到 lib/your_app

  • 一个位于 accounts.ex 中的上下文模块,作为 API 边界
  • 一个位于 accounts/user.ex 中的架构,包含一个 users

还会生成一个用于存储库的迁移文件以及上下文的测试文件。

不使用架构生成

在某些情况下,您可能希望引导上下文模块和测试,但将上下文的内部实现和架构留给自己。使用 --no-schema 标志来实现这一点。

表格

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

$ mix phx.gen.context Accounts User users --table cms_users

二进制 ID

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

默认选项

这个生成器使用应用程序 :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 用于强制生成迁移。

有关属性的更多信息,请阅读 phx.gen.schema 的文档。

跳过提示

如果存在具有相同名称的现有上下文,该生成器将提示您,以便提供有关如何正确使用凤凰上下文,您可以跳过此提示,并使用 --merge-with-existing-context 自动将新的架构访问函数和测试合并到现有上下文中。要防止更改现有上下文并退出生成器,请使用 --no-merge-with-existing-context