Elixir Language
ecto
Zoeken…
Een Ecto.Repo toevoegen in een elixerprogramma
Dit kan in 3 stappen:
U moet een elixermodule definiëren die Ecto.Repo gebruikt en uw app registreren als een otp_app.
defmodule Repo do use Ecto.Repo, otp_app: :custom_app end
U moet ook een configuratie configureren voor de Repo waarmee u verbinding kunt maken met de database. Hier is een voorbeeld met 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"
Voordat u Ecto in uw toepassing kunt gebruiken, moet u ervoor zorgen dat Ecto is gestart voordat uw app wordt gestart. Het kan worden gedaan door Ecto in lib / custom_app.ex te registreren als 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
"en" clausule in een Repo.get_by / 3
Als u een Ecto.Queryable heeft, genaamd Post, die een titel en een beschrijving heeft.
Je kunt het bericht ophalen met de titel: "hallo" en beschrijving: "wereld" door het uitvoeren van:
MyRepo.get_by(Post, [title: "hello", description: "world"])
Dit is allemaal mogelijk omdat Repo.get_by in het tweede argument een zoekwoordenlijst verwacht.
Query's met dynamische velden
Een veld dat naam in een variabele query gebruiken veldfunctie .
some_field = :id
some_value = 10
from p in Post, where: field(p, ^some_field) == ^some_value
Voeg aangepaste gegevenstypen toe aan migratie en aan schema
Het onderstaande voorbeeld voegt een opgesomd type toe aan een postgres-database.
Bewerk eerst het migratiebestand (gemaakt met 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
Ten tweede, voeg in het modelbestand een veld met een Elixer-type toe:
schema "posts" do
field :post_status, :string
end
of implementeer het Ecto.Type
gedrag.
Een goed voorbeeld hiervan is het pakket ecto_enum
en het kan als sjabloon worden gebruikt. Het gebruik ervan is goed gedocumenteerd op de github-pagina .
Deze commit toont een voorbeeldgebruik in een Phoenix-project van het toevoegen van enum_ecto aan het project en het gebruik van het opgesomde type in views en modellen.