Elixir Language
Ecto
Buscar..
Añadiendo un Ecto.Repo en un programa de elixir
Esto se puede hacer en 3 pasos:
Debe definir un módulo de elixir que use Ecto.Repo y registre su aplicación como un otp_app.
defmodule Repo do use Ecto.Repo, otp_app: :custom_app end
También debe definir alguna configuración para el Repo que le permitirá conectarse a la base de datos. Aquí hay un ejemplo con 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"
Antes de utilizar Ecto en su aplicación, debe asegurarse de que Ecto se inicie antes de que se inicie su aplicación. Se puede hacer con el registro de Ecto en lib / custom_app.ex como supervisor.
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
"y" cláusula en un Repo.get_by / 3
Si tiene un Ecto.Queryable, llamado Post, que tiene un título y una descripción.
Puede obtener la publicación con el título: "hola" y la descripción: "mundo" ejecutando:
MyRepo.get_by(Post, [title: "hello", description: "world"])
Todo esto es posible porque Repo.get_by espera en el segundo argumento una Lista de palabras clave.
Consulta con campos dinámicos.
Para consultar un campo cuyo nombre está contenido en una variable, use la función de campo .
some_field = :id
some_value = 10
from p in Post, where: field(p, ^some_field) == ^some_value
Agregue tipos de datos personalizados a la migración y al esquema
El siguiente ejemplo agrega un tipo enumerado a una base de datos de postgres.
Primero, edite el archivo de migración (creado con la 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
Segundo, en el archivo modelo, agregue un campo con un tipo de Elixir:
schema "posts" do
field :post_status, :string
end
o implementar el comportamiento Ecto.Type
.
Un buen ejemplo para este último es el paquete ecto_enum
y se puede usar como plantilla. Su uso está bien documentado en su página github .
Este compromiso muestra un ejemplo de uso en un proyecto de Phoenix al agregar enum_ecto al proyecto y usar el tipo enumerado en vistas y modelos.