Elixir Language
Ecto
Ricerca…
Aggiunta di un Ecto.Repo in un programma di elisir
Questo può essere fatto in 3 passaggi:
Devi definire un modulo elixir che usi Ecto.Repo e registra la tua app come otp_app.
defmodule Repo do use Ecto.Repo, otp_app: :custom_app end
È inoltre necessario definire alcune configurazioni per il Repo che consentiranno di connettersi al database. Ecco un esempio 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"
Prima di utilizzare Ecto nell'applicazione, è necessario assicurarsi che Ecto sia avviato prima dell'avvio dell'app. Può essere fatto con la registrazione di Ecto in lib / custom_app.ex come supervisore.
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
"e" clausola in un Repo.get_by / 3
Se si dispone di un Ecto.Queryable, denominato Post, che ha un titolo e una descrizione.
Puoi recuperare il post con il titolo: "ciao" e descrizione: "mondo" eseguendo:
MyRepo.get_by(Post, [title: "hello", description: "world"])
Tutto ciò è possibile perché Repo.get_by si aspetta in secondo argomento un elenco di parole chiave.
Interrogazione con campi dinamici
Per interrogare un campo il cui nome è contenuto in una variabile, utilizzare la funzione campo .
some_field = :id
some_value = 10
from p in Post, where: field(p, ^some_field) == ^some_value
Aggiungi tipi di dati personalizzati alla migrazione e allo schema
L'esempio seguente aggiunge un tipo enumerato a un database postgres.
Innanzitutto, modifica il file di migrazione (creato con 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
In secondo luogo, nel file del modello aggiungi un campo con un tipo di Elisir:
schema "posts" do
field :post_status, :string
end
o implementare il comportamento di Ecto.Type
.
Un buon esempio per quest'ultimo è il pacchetto ecto_enum
e può essere usato come modello. Il suo utilizzo è ben documentato sulla sua pagina github .
Questo commit mostra un esempio di utilizzo in un progetto Phoenix aggiungendo enum_ecto al progetto e utilizzando il tipo enumerato nelle viste e nei modelli.