サーチ…


エリクサープログラムでEcto.Repoを追加する

これは3つのステップで行うことができます:

  1. あなたはEcto.Repoを使用するエリクシールモジュールを定義し、あなたのアプリをotp_appとして登録する必要があります。

    defmodule Repo do
      use Ecto.Repo, otp_app: :custom_app
    end
    
  2. また、データベースに接続できるようにするRepo用の設定をいくつか定義する必要があります。ここにはポストグルの例があります。

    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. アプリケーションでEctoを使用する前に、Ectoを起動してからアプリを起動する必要があります。これは、スーパーユーザーとしてlib / custom_app.exにEctoを登録することで行うことができます。

        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
    

Repo.get_by / 3の節

あなたがEcto.Queryableを持っていれば、タイトルと説明を持つPostという名前です。

次のようにして、タイトルが「hello」、説明が「world」のPostを取得できます。

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

Repo.get_byは2番目の引数にキーワードリストを期待しているので、これはすべて可能です。

動的フィールドを使用したクエリ

変数に含まれる名前のフィールドを照会するには、 field関数を使用します

some_field = :id
some_value = 10

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

カスタムデータ型を移行およびスキーマに追加する

(この回答から)

以下の例では、 列挙型をpostgresデータベースに追加しています。

まず、 移行ファイル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

次に、 モデルファイルで Elixir型のフィールドを追加するか、

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

またはEcto.Typeビヘイビアを実装します。

後者の良い例はecto_enumパッケージで、テンプレートとして使用できます。その使用法はgithubページでよく説明されています

このコミットは、Phoenixプロジェクトでenum_ectoをプロジェクトに追加し、ビューとモデルで列挙型を使用する例示しています。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow