Zoeken…


Een Ecto.Repo toevoegen in een elixerprogramma

Dit kan in 3 stappen:

  1. U moet een elixermodule definiëren die Ecto.Repo gebruikt en uw app registreren als een otp_app.

    defmodule Repo do
      use Ecto.Repo, otp_app: :custom_app
    end
    
  2. U moet ook een configuratie configureren voor de Repo waarmee u verbinding kunt maken met de database. Hier is een voorbeeld met 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. Voordat u Ecto in uw toepassing kunt gebruiken, moet u ervoor zorgen dat Ecto is gestart voordat uw app wordt gestart. Het kan worden gedaan door Ecto in lib / custom_app.ex te registreren als supervisor.

        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
    

"en" clausule in een Repo.get_by / 3

Als u een Ecto.Queryable heeft, genaamd Post, die een titel en een beschrijving heeft.

Je kunt het bericht ophalen met de titel: "hallo" en beschrijving: "wereld" door het uitvoeren van:

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

Dit is allemaal mogelijk omdat Repo.get_by in het tweede argument een zoekwoordenlijst verwacht.

Query's met dynamische velden

Een veld dat naam in een variabele query gebruiken veldfunctie .

some_field = :id
some_value = 10

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

Voeg aangepaste gegevenstypen toe aan migratie en aan schema

(Uit dit antwoord)

Het onderstaande voorbeeld voegt een opgesomd type toe aan een postgres-database.

Bewerk eerst het migratiebestand (gemaakt met 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

Ten tweede, voeg in het modelbestand een veld met een Elixer-type toe:

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

of implementeer het Ecto.Type gedrag.

Een goed voorbeeld hiervan is het pakket ecto_enum en het kan als sjabloon worden gebruikt. Het gebruik ervan is goed gedocumenteerd op de github-pagina .

Deze commit toont een voorbeeldgebruik in een Phoenix-project van het toevoegen van enum_ecto aan het project en het gebruik van het opgesomde type in views en modellen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow