mix phx.gen.schema
Исходный кодСоздаёт схему Ecto и миграцию.
$ mix phx.gen.schema Blog.Post blog_posts title:string views:integer
Первый аргумент — модуль схемы, за которым следует её имя во множественном числе (используемое в качестве имени таблицы).
Созданная выше схема будет содержать:
- файл схемы в
lib/my_app/blog/post.exс таблицейblog_posts - файл миграции для репозитория
Создание миграции можно пропустить с помощью --no-migration.
Контексты
Схемы можно создать и добавить в отдельное приложение OTP. Убедитесь, что конфигурация настроена правильно, или укажите приложение контекста вручную с помощью параметра --context-app в CLI.
Через конфигурацию:
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, где 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
Столбцы redact можно создать автоматически с помощью:
$ 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.
primary_key
По умолчанию первичный ключ таблицы называется id. Этот параметр позволяет изменить имя столбца первичного ключа. Например:
$ mix phx.gen.schema Blog.post posts --primary-key post_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, чтобы использовать обычные идентификаторы вопреки конфигурации по умолчанию, или --migration, чтобы принудительно создать миграцию.
Метки времени UTC
Если установить :timestamp_type в :utc_datetime, метки времени будут создаваться с использованием часового пояса UTC. В результате будет использоваться структура DateTime вместо NaiveDateTime. Для точности до микросекунд также можно установить значение :utc_datetime_usec.
© 2014 Chris McCord
Licensed under the MIT License.
https://phoenix.hexdocs.pm/Mix.Tasks.Phx.Gen.Schema.html