Elixir Language
Ekto
Sök…
Lägga till en Ecto.Repo i ett elixirprogram
Detta kan göras i tre steg:
Du måste definiera en elixir-modul som använder Ecto.Repo och registrera din app som en otp_app.
defmodule Repo do use Ecto.Repo, otp_app: :custom_app end
Du måste också definiera någon konfigurering för Repo som gör att du kan ansluta till databasen. Här är ett exempel med 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"
Innan du använder Ecto i din applikation måste du se till att Ecto startas innan din app startas. Det kan göras genom att registrera Ecto i lib / custom_app.ex som en handledare.
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
"och" klausul i en Repo.get_by / 3
Om du har en Ecto.Queryable, med namnet Post, som har en titel och en beskrivning.
Du kan hämta inlägget med titeln: "hej" och beskrivning: "världen" genom att utföra:
MyRepo.get_by(Post, [title: "hello", description: "world"])
Allt detta är möjligt eftersom Repo.get_by i det andra argumentet förväntar sig en sökordslista.
Fråga med dynamiska fält
Att fråga ett område som namn ingår i en variabel använder fältfunktionen .
some_field = :id
some_value = 10
from p in Post, where: field(p, ^some_field) == ^some_value
Lägg till anpassade datatyper till migrering och till schema
Exemplet nedan lägger till en uppräknad typ till en postgres-databas.
Redigera först migreringsfilen (skapad med 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
För det andra, i modellfilen lägg till antingen ett fält med en Elixir-typ:
schema "posts" do
field :post_status, :string
end
eller implementera Ecto.Type
beteendet.
Ett bra exempel för det senare är paketet ecto_enum
och det kan användas som en mall. Användningen är väl dokumenterad på sin github-sida .
Denna åtagande visar ett exempel på användning i ett Phoenix-projekt från att lägga till enum_ecto till projektet och använda den uppräknade typen i vyer och modeller.