Suche…


Hinzufügen eines Ecto.Repo in einem Elixierprogramm

Dies kann in 3 Schritten erfolgen:

  1. 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
    
  2. 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"
    
  3. 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

(Aus dieser Antwort)

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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow