檢視原始碼 mix phx.gen.context (Phoenix v1.7.14)

產生一個圍繞 Ecto schema 的函數 context。

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

第一個引數是 context 模組,其次是 schema 模組及其複數名稱(用作 schema 資料表名稱)。

此 context 是 Elixir 模組,用作給定資源的 API 邊界。一個 context 通常包含許多相關資源。因此,如果 context 已存在,它將會透過給定資源的函數進行擴充。

注意:一個資源也可以透過個別的 context 來分割(例如 Accounts.User 和 Payments.User)。

Schema 負責將資料庫欄位對應到 Elixir 結構。

總言之,此產生器會將以下檔案新增至 lib/your_app

  • 使用 accounts.ex 中的 context 模組,用作 API 邊界
  • accounts/user.ex 中的 schema,搭配 users 資料表

也會產生存放庫用於搬遷的檔案,以及 context 的測試檔案。

略過 schema 來產生

在某些情況下,您可能會希望啟動 context 模組和測試,但保留自行執行 context 和 schema 的內部實作。使用 --no-schema 旗標就能執行這項工作。

資料表

預設情況下,用於搬遷和 schema 的資料表名稱會是為資源提供的複數名稱。如果要自訂此值,可以提供 --table 選項。例如

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

binary_id

已產生的搬遷可以使用 binary_id 來取得 schema 的主鍵及其參照,選項為 --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 的說明文件以取得關於屬性的更多資訊。

略過提示

此產生器會在有相同名稱的現有背景時提示,以提供更多有關如何正確使用 phoenix 背景的指示。您可以使用 --merge-with-existing-context,略過此提示並自動將新的架構存取函數和測試合併到現有背景。若要避免對現有背景進行變更和離開產生器,請使用 --no-merge-with-existing-context