Recherche…


Ajouter un Ecto.Repo dans un programme d'élixir

Cela peut être fait en 3 étapes:

  1. Vous devez définir un module elixir qui utilise Ecto.Repo et enregistrer votre application en tant que otp_app.

    defmodule Repo do
      use Ecto.Repo, otp_app: :custom_app
    end
    
  2. Vous devez également définir une configuration pour le dépôt qui vous permettra de vous connecter à la base de données. Voici un exemple avec 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. Avant d'utiliser Ecto dans votre application, vous devez vous assurer que Ecto est démarré avant le démarrage de votre application. Cela peut être fait en enregistrant Ecto dans lib / custom_app.ex en tant que superviseur.

        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
    

"et" clause dans un Repo.get_by / 3

Si vous avez un Ecto.Queryable, nommé Post, qui a un titre et une description.

Vous pouvez chercher le post avec le titre: "bonjour" et la description: "monde" en effectuant:

 MyRepo.get_by(Post, [title: "hello", description: "world"])

Tout cela est possible car Repo.get_by attend en deuxième argument une liste de mots-clés.

Interroger avec des champs dynamiques

Pour interroger un champ dont le nom est contenu dans une variable, utilisez la fonction de champ .

some_field = :id
some_value = 10

from p in Post, where: field(p, ^some_field) == ^some_value

Ajouter des types de données personnalisés à la migration et au schéma

(De cette réponse)

L'exemple ci-dessous ajoute un type énuméré à une base de données postgres.

Tout d'abord, éditez le fichier de migration (créé avec 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

Deuxièmement, dans le fichier modèle, ajoutez un champ de type Elixir:

schema "posts" do
  field :post_status, :string
end

ou implémenter le comportement Ecto.Type .

Le paquet ecto_enum est un bon exemple et peut être utilisé comme modèle. Son utilisation est bien documentée sur sa page github .

Cette validation montre un exemple d'utilisation dans un projet Phoenix de l'ajout d'énum_ecto au projet et de l'utilisation du type énuméré dans les vues et les modèles.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow