目次
および次のようにDEPS/0を更新してください:
​​
ecto.multiとは?

ECTOライブラリ

Feb 18, 2025 am 09:38 AM

ECTOライブラリ

Elixirは、高度に分布した誤りのアプリケーションを構築するために使用される、近代的で動的な機能的なプログラミング言語です。 Ectoは、データベースを操作するためのメインライブラリであり、一般的なAPIでデータベースと対話するためのツールを提供し、アプリケーションと並んでデータベースをバージョン、アプリケーション内のデータ処理を処理します。

この記事では、ECTOライブラリの主要な側面を簡単に見ていきます。 ECTO 1.xのために書かれていますが、この記事の例はECTO 2と互換性のある転送であり、矛盾がある場合、それらが言及されています。 ElixirとMixの基本的な知識が想定されています

キーテイクアウト

セットアッププロセスには、新しいミックスアプリケーションの作成、依存関係の構成、および効果的なデータベース管理のためにアプリケーションの監督ツリーにECTOリポジトリモジュールを統合することが含まれます。 この記事では、ECTOを使用してシンプルなCRUDアプリケーションの構築を示しています。レコードの作成、読み取り、更新、削除などのデータベース操作の実行方法を示しています。
  • アプリケーション
  • ゼロから非常にシンプルなアプリケーションを構築し、メモを保存および取得します。これを行うことで、ectoの4つの主要なコンポーネントのそれぞれを調べます:レポ、スキーマ、チェンジセット、クエリ。
  • 新しいアプリケーションの作成
  • 新しいMIXアプリケーションを生成することから始めましょう:
  • - supフラグは、OTPアプリケーションに必要な追加のボイラープレートコードを生成します。このアプリケーションには、Ectoがそれを必要とするので、監督のツリーが必要です(これについては1分で)。 依存関係のセットアップ

    次に、いくつかのアプリケーション依存関係を備えたMix.Exsファイルを更新しましょう。このために、Ectoとそのアダプターの1つを指定したいと思います。これにMySQLを使用することを選択したので、Mariaexライブラリを指定する必要があります(ECTOは多くのデータベースをサポートしています)。

    mix.exsファイルでアプリケーション/0関数を更新します。

    および次のようにDEPS/0を更新してください:

    Mix Deps.getを使用して依存関係を取得します。
    mix new notex <span>--sup
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    次に、これらの依存関係をアプリケーションに統合する必要があります。これには、ECTOリポジトリ用の新しいラッパーモジュールを作成し、アプリケーションの監督ツリーを更新してその新しいモジュールを開始および監督し、アダプターの接続情報の構成を含みます。

    まず、lib/notex/repo.exでnotex.repoモジュールを次のコードで定義することから始めましょう。

    このモジュールの場所(lib/app_name/repo.ex)は従来のものです。 Mix Ectoコマンドを使用すると、Appname.repoで定義されたリポジトリを探すことがデフォルトです。他の場所に配置できますが、-r(repo)フラグを使用してその場所を指定する必要があることはご不便です。
    mix new notex <span>--sup
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    上記のnotex.Repoモジュールを使用すると、ECTOを使用してデータベースを操作できます。これは、最初にECTOのレポジットモジュールから関数を挿入し(データベースを提供するAPIをクエリする)、次のOTPアプリケーションを次のように指定することで行います。

    ectoリポジトリは、基礎となる

    データベース

    (使用されているアダプターによって決定される)と対話するための一般的なインターフェイスを提供します。そのため、Ectoは用語リポジトリを使用していますが、テーブルではなくデータベースの周りのラッパーであるため、リポジトリ設計パターンには従いません。

    notex.repoモジュールを子監督者として追加しました(それ自体が監督OTPアプリであるため)。これは、OTPアプリケーションによって監督されることを意味し、アプリケーションがアプリケーションの起動時に開始する責任があります。 mix new notex <span>--sup </span> ここでは、データベースとの通信を有効にするために、OTPアプリケーションの名前(:notex)と新たに定義されたモジュール(notex.repo)の名前を指定します。他の構成オプションは、かなり自明である必要があります。 ECTO 2では、アプリケーションで使用しているECTOリポジトリのリストをさらに指定する必要があります。

    ectoは、実際に上記のレポモジュールをミックスタスクとしてセットアップするためのショートカットを提供します:mixecto.gen.repo。これにより、当社用のリポジトリモジュールが生成され、基本的な構成を使用してconfig.exsファイルを更新します(ただし、監督ツリーに手動で追加する必要があります)。ここでは、ectoを手動でセットアップする方法を示す教訓的な理由で、ここでそれを使用することを避けました(それは、リポジトリジェネレーターがPostgresを使用していると想定しているという事実なので、とにかく構成のアダプターを更新する必要がありました)。 🎜>

    先に進む前に、プロセスの階層を非常に簡単に見てみましょう。 (ECTO 2を実行している場合は、プロジェクトをコンパイルしようとする前にMix Ecto.createでデータベースを作成する必要があることに注意してください。)Elixirのインタラクティブシェルでアプリケーションを起動してから、オブザーバーを起動することに注意してください。

    [アプリケーション]タブに移動すると、監督者であるものを含むアプリケーションのプロセスを確認できます。
    <span>def <span>application</span> do
    </span>  <span>[applications: [:logger, :ecto, :mariaex],
    </span>   <span>mod: {Notex, []}]
    </span><span>end
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    そのため、このアプリケーションはOTPアプリである必要があります。しかし、それはこの記事ではプロセスとOTPに関して、ウサギの穴をはるかに下回っています。後の記事で詳細に説明されます。

    データベースとテーブルの作成ECTOライブラリ

    そのセットアップを使用すると、データベースとテーブルを作成できます。データベースを作成するには、次のコマンドを実行します

    テーブルを作成するには、ECTOの移行機能を使用します。移行により、ソースコードと一緒にデータベースにバージョンをバージョンすることができ、変更を追跡し、異なる状態を適用できるようにします。したがって、データベースの構造を変更したい場合はいつでも、新しい移行を作成します。

    次のように、Mix Ecto.gen.migrationコマンドを使用して新しい移行を作成できます。

    上記は、Priv/Repo/Migrationsで新しい移行フォルダーと新しい移行ファイルを作成する必要があります。このファイルには、移行名とともに作成された日付と時刻が作成されています(簡単なディレクトリの注文用)。そのファイルを開き、次のように変更します。

    mix new notex <span>--sup
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    物事をシンプルに保つと、Create Macroを使用して、2つのフィールドを持つ新しいテーブル(Notes)を定義しました:Note_NameとNote_Content。主キーは、私たちのために自動的に作成されます(IDという名前)。両方のフィールドは単純な文字列として定義されていましたが、Ectoは多くのタイプをサポートしています。

    移行が完了すると、次のコマンドで移行を実行できます。

    これにより、3つのフィールド(3番目のフィールドがID、プライマリキー)を持つノートテーブルが作成されます。
    <span>def <span>application</span> do
    </span>  <span>[applications: [:logger, :ecto, :mariaex],
    </span>   <span>mod: {Notex, []}]
    </span><span>end
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    テーブルが作成された状態で、テーブルのモデルを作成する時が来ました。このモデルは、テーブルのフィールドとそれぞれのタイプを定義するために使用されます。これらは、データをキャストおよび検証するときにアプリケーションとECTOのDSLのクエリによって使用されます。モデルの定義には、仮想フィールド(移行定義とは異なり)が含まれている場合があります。これらは、通常は、パスワードのないパスワードなど)を保持するために通常は一時的なデータを保持するために使用されます。

    その最も基本的な形式では、notex.noteモデル(lib/notex/note.exにあります)は次のようになります。

    ecto.schemaモジュールを注入して、スキーママクロを使用してフィールドとそのタイプを定義できるようにします。これらの定義は、ECTOの変更セットを使用すると、後で重要になります。スキーママクロが行う他のことは、タイプの構造体を現在のモジュールとして定義することです(この場合、それは%notex.note {}です)。この構造により、新しい変更セットを作成し(これについては詳細)、テーブルにデータを挿入できます。

    上記のみを使用して、IEXを起動してデータベースの照会を開始できます。

    (編集情報のデバッグのデバッグをコンソール
    defp deps <span>do
    </span>  <span>[{:ecto, <span>"~> 1.1.5"</span>}, # or "~> 2.0" for Ecto 2
    </span>   <span>{:mariaex, <span>"~> 0.6.0"</span>}] # or "~> 0.7.0" for Ecto 2
    </span><span>end
    </span>
    ログイン後にコピー

    (編集情報のデバッグのデバッグをコンソール

    defmodule Notex.Repo do use Ecto.Repo, otp_app: :notex end

    変更セットは、レコードを操作するときに使用するものです。これらにより、挿入前にデータの変更を追跡し、それらの変更を検証し、その値を正しいデータ型にキャストすることができます(スキーマ定義に従って)。上記からわかるように、�to.changeset{} structには、変更が有効であるかどうかを確認するのに役立つ多数のメンバーが含まれています(Changeset.Valid?) .Errors)、など

    notex.noteモデルを更新して、いくつかの変更セットとクエリ操作を実証しましょう。これらの実行は少し乱雑になっているためです。

    mix new notex <span>--sup
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    5つの新しい機能のそれぞれを確認しましょう。 insert_note/1関数は、私たちのために新しいメモを作成します。 CAST/4関数は、入力フィールドからそれぞれのフィールドタイプへのデータのキャストを(スキーマ定義に従って)処理し、必要なすべてのフィールドに値があることを確認します。 CAST/4から返されるChangesetがデータベースに挿入されます。 ECTO 2では、cast/3およびvalidate_required/3関数をcast/4の代わりに使用する必要があることに注意してください。

    get_notes/0関数は、テーブル内のすべてのメモのタプルのリストを返します。これは、Selectステートメントのパターンマッチングによって行われます。 (代わりにSelect:%{id:n.id、note_name:n.note_name}を使用して、代わりにマップのリストを非常に簡単に返すことができました。)

    get_note/1関数は、メモIDに従ってテーブルから単一のメモを取得します。これはgetによって行われます!成功したときにメモを返すか、失敗したときにスローする関数。

    update_note/1関数は、付属のメモIDに従ってノートを更新します。関数署名(IDキー)のマップの文字列キーに注意してください。これは、私がフェニックスフレームワークから取った慣習であり、非サンタイズされたデータ(通常はユーザーサプライ)が文字列キーを備えたマップで表され、サニタイズされたデータはAtomキーを含むマップで表されます。更新を実行するには、最初にデータベースからそのIDに従ってメモを取得し、次にキャスト/4関数を使用してレコードに変更を適用してから、最終的に更新された変更セットをデータベースに戻します。

    delete_note/1関数は、データベースからメモを削除します。まず、そのIDを介してデータベースからメモを取得し(update_note/1関数と同様)、返されたメモ構造を使用して削除します。 上記のCRUD操作を整備していると、IEXに戻って試してみましょう:

    (編集情報のデバッグのデバッグをコンソール

    そして、ectoを使用した基本的なCRUDアプリケーションがあります!出力をレンダリングしてAPIをより良くすることができますが、私たちがカバーしているものに接するものであるため、拡張機能としてそれを残します(そして、この記事は十分に長いです、

    <span>def <span>application</span> do
    </span>  <span>[applications: [:logger, :ecto, :mariaex],
    </span>   <span>mod: {Notex, []}]
    </span><span>end
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    結論

    この記事は、簡単なCRUDアプリケーションをゼロから作成することにより、ECTOの基礎を検討しました。 OTPなどの接線上のトピックに触れるとともに、移行、スキーマ、およびそのクエリDSLなどのレコードやデータベースの変更を管理するための多くの能力ECTOパックが見られました。これがElixirのデータベースを操作する際にスピードを上げたいと考えている人のための優れた入門書として役立ったことを願っています!私の次の記事では、ElixirのECTOがDSLを照会する基本を見ていきます。 ElixirのEcto Library

    に関するよくある質問(FAQ)

    ElixirのECTOライブラリの目的は何ですか?

    ​​

    ElixirのECTOライブラリは、Elixirのデータベースラッパーおよび言語統合クエリです。アプリケーション内のすべてのデータ操作タスクを処理するように設計されており、データベースと対話するための統一されたAPIを提供します。 ECTOを使用すると、レコードを作成、読み取り、更新、削除したり、複雑なクエリ、トランザクション、および移行を実行したりできます。 PostgreSQLやMySQLを含むさまざまなデータベースをサポートしているため、Elixir開発者にとって汎用性の高いツールになっています。 。 Changesetは、エラー、検証、および型キャスト情報とともに、データベースに変更される変更を保持するデータ構造です。変更セットは、データベースに有効なデータのみが保存され、データ検証とエラー処理のための堅牢なメカニズムを提供することを保証します。これにより、読みやすく効率的な方法で複雑なクエリを書くことができます。 Fromキーワードを使用してクエリを開始し、Select、Where、Order_byなどのその他の関数をチェーンし、クエリを作成するために参加できます。 Ectoは、サブクエリ、集約、およびその他の高度なSQL機能もサポートしています。データ。 Elixirアプリケーションからデータをデータベーステーブルにマッピングし、その逆も同様です。 ecto.schemaを使用すると、データのフィールド、その種類、および異なるスキーマ間の関連性を定義できます。データベースの移行を処理するため。移行は、データベースの構造を時間の経過とともに変更するスクリプトです。テーブルを作成またはドロップしたり、列を追加または削除したり、インデックスを作成したりできます。 Ectoの移行機能により、これらの変更が制御され、可逆的な方法で実行されることが保証されます。アダプターの使用によるデータベース。ただし、移行や複雑なクエリなどの一部の機能は完全にサポートされていないか、使用されている特定のNOSQLデータベースとアダプターに応じて異なって機能する場合があります。

    ECTOはトランザクションをどのように処理しますか?トランザクションを処理するための強力なAPI。 ecto.repo.transaction関数を使用してトランザクションを開始できます。トランザクション内で行われた変更は、関数が返される場合はデータベースにコミットされます。

    ecto.multiとは?

    ecto.multiは、複数の操作をグループ化できるECTOの特徴です。単一のトランザクションで複数の操作を実行する必要がある場合に便利であり、それらのすべてが成功または全体として失敗することを望みます。 Ecto.Multiはデータの一貫性を保証し、エラー処理を容易にします。 Phoenixは、すべてのデータ操作ニーズにECTOを使用し、ECTOスキーマ、変更セット、および移行を簡単に作成できる発電機を提供します。また、PhoenixコントローラーとビューでEctoのクエリAPIを直接使用することもできます。

    ectoについて詳しく知るにはどうすればよいですか?

    公式のEctoドキュメントは、ECTOの詳細を学ぶための優れたリソースです。 Ectoのすべての機能に関する包括的なガイドと、例とベストプラクティスを提供します。また、ECTOのさまざまな側面をより詳細にカバーする多くのチュートリアルやブログ投稿をオンラインで見つけることもできます。

    以上がECTOライブラリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    CNCF ARM64パイロット:インパクトと洞察 CNCF ARM64パイロット:インパクトと洞察 Apr 15, 2025 am 08:27 AM

    このパイロットプログラム、CNCF(クラウドネイティブコンピューティングファンデーション)、アンペアコンピューティング、Equinix Metal、およびActuatedのコラボレーションであるCNCF GithubプロジェクトのARM64 CI/CDが合理化されます。 このイニシアチブは、セキュリティの懸念とパフォーマンスリムに対処します

    AWS ECSとLambdaを備えたサーバーレス画像処理パイプライン AWS ECSとLambdaを備えたサーバーレス画像処理パイプライン Apr 18, 2025 am 08:28 AM

    このチュートリアルは、AWSサービスを使用してサーバーレスイメージ処理パイプラインを構築することをガイドします。 APIゲートウェイ、Lambda関数、S3バケット、およびDynamoDBと対話するECS Fargateクラスターに展開されたnext.jsフロントエンドを作成します。 th

    2025年に購読する上位21の開発者ニュースレター 2025年に購読する上位21の開発者ニュースレター Apr 24, 2025 am 08:28 AM

    これらのトップ開発者ニュースレターを使用して、最新のハイテクトレンドについてお知らせください! このキュレーションされたリストは、AI愛好家からベテランのバックエンドやフロントエンド開発者まで、すべての人に何かを提供します。 お気に入りを選択し、Relを検索する時間を節約してください

    See all articles