Sök…


Lägga till en Ecto.Repo i ett elixirprogram

Detta kan göras i tre steg:

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

(Från detta svar)

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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow