Elixir Language
Ecto
Suche…
Hinzufügen eines Ecto.Repo in einem Elixierprogramm
Dies kann in 3 Schritten erfolgen:
Sie müssen ein Elixiermodul definieren, das Ecto.Repo verwendet, und Ihre App als otp_app registrieren.
defmodule Repo do use Ecto.Repo, otp_app: :custom_app end
Sie müssen auch eine Konfiguration für das Repo definieren, mit der Sie eine Verbindung zur Datenbank herstellen können. Hier ist ein Beispiel mit 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"
Bevor Sie Ecto in Ihrer Anwendung verwenden, müssen Sie sicherstellen, dass Ecto gestartet wird, bevor Ihre App gestartet wird. Dies kann mit der Registrierung von Ecto in lib / custom_app.ex als Supervisor erfolgen.
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
"and" -Klausel in einem Repo.get_by / 3
Wenn Sie eine Ecto.Queryable haben, heißt Post, die einen Titel und eine Beschreibung hat.
Sie können den Beitrag mit Titel: "Hallo" und Beschreibung: "Welt" abrufen, indem Sie Folgendes ausführen:
MyRepo.get_by(Post, [title: "hello", description: "world"])
All dies ist möglich, da Repo.get_by im zweiten Argument eine Keyword-Liste erwartet.
Abfragen mit dynamischen Feldern
Um ein Feld abzufragen, dessen Name in einer Variablen enthalten ist, verwenden Sie die Feldfunktion .
some_field = :id
some_value = 10
from p in Post, where: field(p, ^some_field) == ^some_value
Fügen Sie der Migration und dem Schema benutzerdefinierte Datentypen hinzu
Das folgende Beispiel fügt einer Postgres-Datenbank einen Aufzählungstyp hinzu.
Bearbeiten Sie zuerst die Migrationsdatei (erstellt mit 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
Zweitens fügen Sie in der Modelldatei entweder ein Feld mit einem Elixir-Typ hinzu:
schema "posts" do
field :post_status, :string
end
oder implementieren Sie das Verhalten von Ecto.Type
.
Ein gutes Beispiel für Letzteres ist das Paket ecto_enum
, das als Vorlage verwendet werden kann. Ihre Verwendung ist auf der Github-Seite gut dokumentiert.
Dieses Commit zeigt ein Beispiel für die Verwendung in einem Phoenix-Projekt, indem enum_ecto zum Projekt hinzugefügt und der aufgezählte Typ in Ansichten und Modellen verwendet wird.