Elixir Language
Ecto
Поиск…
Добавление Ecto.Repo в программу эликсира
Это можно сделать в 3 этапа:
Вы должны определить модуль эликсира, который использует Ecto.Repo и зарегистрировать ваше приложение как otp_app.
defmodule Repo do use Ecto.Repo, otp_app: :custom_app end
Вы также должны определить некоторую конфигурацию для Repo, которая позволит вам подключиться к базе данных. Вот пример с postgres.
config :custom_app, Repo, adapter: Ecto.Adapters.Postgres, database: "ecto_custom_dev", username: "postgres_dev", password: "postgres_dev", hostname: "localhost", # OR use a URL to connect instead url: "postgres://postgres_dev:postgres_dev@localhost/ecto_custom_dev"
Прежде чем использовать Ecto в своем приложении, вам необходимо убедиться, что Ecto запущен до запуска вашего приложения. Это можно сделать, зарегистрировав Ecto в lib / custom_app.ex как супервизор.
def start(_type, _args) do import Supervisor.Spec children = [ supervisor(Repo, []) ] opts = [strategy: :one_for_one, name: MyApp.Supervisor] Supervisor.start_link(children, opts) end
"и" в Repo.get_by / 3
Если у вас есть Ecto.Queryable с именем Post, у которого есть заголовок и описание.
Вы можете получить сообщение с заголовком: «привет» и описание: «мир», выполнив:
MyRepo.get_by(Post, [title: "hello", description: "world"])
Все это возможно, потому что Repo.get_by ожидает во втором аргументе списка ключевых слов.
Запрос с динамическими полями
Чтобы запросить поле, имя которого содержится в переменной, используйте функцию поля .
some_field = :id
some_value = 10
from p in Post, where: field(p, ^some_field) == ^some_value
Добавление настраиваемых типов данных для миграции и схемы
В приведенном ниже примере добавляется перечисляемый тип в базу данных postgres.
Сначала отредактируйте файл миграции (созданный с помощью mix ecto.gen.migration
):
def up do
# creating the enumerated type
execute("CREATE TYPE post_status AS ENUM ('published', 'editing')")
# creating a table with the column
create table(:posts) do
add :post_status, :post_status, null: false
end
end
def down do
drop table(:posts)
execute("DROP TYPE post_status")
end
Во-вторых, в файле модели добавьте поле с типом Elixir:
schema "posts" do
field :post_status, :string
end
или реализовать поведение Ecto.Type
.
Хорошим примером для последнего является пакет ecto_enum
и его можно использовать в качестве шаблона. Его использование хорошо документировано на странице github .
Эта фиксация показывает пример использования в проекте Phoenix из добавления enum_ecto в проект и использования перечисляемого типа в представлениях и моделях.