ホームページ >テクノロジー周辺機器 >IT業界 >ECTOライブラリ
Elixirは、高度に分布した誤りのアプリケーションを構築するために使用される、近代的で動的な機能的なプログラミング言語です。 Ectoは、データベースを操作するためのメインライブラリであり、一般的なAPIでデータベースと対話するためのツールを提供し、アプリケーションと並んでデータベースをバージョン、アプリケーション内のデータ処理を処理します。
この記事では、ECTOライブラリの主要な側面を簡単に見ていきます。 ECTO 1.xのために書かれていますが、この記事の例はECTO 2と互換性のある転送であり、矛盾がある場合、それらが言及されています。 ElixirとMixの基本的な知識が想定されていますキーテイクアウト
mix.exsファイルでアプリケーション/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アプリケーションによって監督されることを意味し、アプリケーションがアプリケーションの起動時に開始する責任があります。
ectoは、実際に上記のレポモジュールをミックスタスクとしてセットアップするためのショートカットを提供します:mixecto.gen.repo。これにより、当社用のリポジトリモジュールが生成され、基本的な構成を使用してconfig.exsファイルを更新します(ただし、監督ツリーに手動で追加する必要があります)。ここでは、ectoを手動でセットアップする方法を示す教訓的な理由で、ここでそれを使用することを避けました(それは、リポジトリジェネレーターがPostgresを使用していると想定しているという事実なので、とにかく構成のアダプターを更新する必要がありました)。 🎜>
データベースとテーブルの作成
上記は、Priv/Repo/Migrationsで新しい移行フォルダーと新しい移行ファイルを作成する必要があります。このファイルには、移行名とともに作成された日付と時刻が作成されています(簡単なディレクトリの注文用)。そのファイルを開き、次のように変更します。 物事をシンプルに保つと、Create Macroを使用して、2つのフィールドを持つ新しいテーブル(Notes)を定義しました:Note_NameとNote_Content。主キーは、私たちのために自動的に作成されます(IDという名前)。両方のフィールドは単純な文字列として定義されていましたが、Ectoは多くのタイプをサポートしています。
その最も基本的な形式では、notex.noteモデル(lib/notex/note.exにあります)は次のようになります。
ecto.schemaモジュールを注入して、スキーママクロを使用してフィールドとそのタイプを定義できるようにします。これらの定義は、ECTOの変更セットを使用すると、後で重要になります。スキーママクロが行う他のことは、タイプの構造体を現在のモジュールとして定義することです(この場合、それは%notex.note {}です)。この構造により、新しい変更セットを作成し(これについては詳細)、テーブルにデータを挿入できます。
(編集情報のデバッグのデバッグをコンソール 変更セットは、レコードを操作するときに使用するものです。これらにより、挿入前にデータの変更を追跡し、それらの変更を検証し、その値を正しいデータ型にキャストすることができます(スキーマ定義に従って)。上記からわかるように、�to.changeset{} structには、変更が有効であるかどうかを確認するのに役立つ多数のメンバーが含まれています(Changeset.Valid?) .Errors)、など notex.noteモデルを更新して、いくつかの変更セットとクエリ操作を実証しましょう。これらの実行は少し乱雑になっているためです。
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関数を使用してレコードに変更を適用してから、最終的に更新された変更セットをデータベースに戻します。
(編集情報のデバッグのデバッグをコンソール そして、ectoを使用した基本的なCRUDアプリケーションがあります!出力をレンダリングしてAPIをより良くすることができますが、私たちがカバーしているものに接するものであるため、拡張機能としてそれを残します(そして、この記事は十分に長いです、
ecto.multiは、複数の操作をグループ化できるECTOの特徴です。単一のトランザクションで複数の操作を実行する必要がある場合に便利であり、それらのすべてが成功または全体として失敗することを望みます。 Ecto.Multiはデータの一貫性を保証し、エラー処理を容易にします。 Phoenixは、すべてのデータ操作ニーズにECTOを使用し、ECTOスキーマ、変更セット、および移行を簡単に作成できる発電機を提供します。また、PhoenixコントローラーとビューでEctoのクエリAPIを直接使用することもできます。<span>def <span>application</span> do
</span> <span>[applications: [:logger, :ecto, :mariaex],
</span> <span>mod: {Notex, []}]
</span><span>end
</span>
そのため、このアプリケーションはOTPアプリである必要があります。しかし、それはこの記事ではプロセスとOTPに関して、ウサギの穴をはるかに下回っています。後の記事で詳細に説明されます。
次のように、Mix Ecto.gen.migrationコマンドを使用して新しい移行を作成できます。
mix new notex <span>--sup
</span>
<span>def <span>application</span> do
</span> <span>[applications: [:logger, :ecto, :mariaex],
</span> <span>mod: {Notex, []}]
</span><span>end
</span>
テーブルが作成された状態で、テーブルのモデルを作成する時が来ました。このモデルは、テーブルのフィールドとそれぞれのタイプを定義するために使用されます。これらは、データをキャストおよび検証するときにアプリケーションとECTOのDSLのクエリによって使用されます。モデルの定義には、仮想フィールド(移行定義とは異なり)が含まれている場合があります。これらは、通常は、パスワードのないパスワードなど)を保持するために通常は一時的なデータを保持するために使用されます。
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>
mix new notex <span>--sup
</span>
5つの新しい機能のそれぞれを確認しましょう。 insert_note/1関数は、私たちのために新しいメモを作成します。 CAST/4関数は、入力フィールドからそれぞれのフィールドタイプへのデータのキャストを(スキーマ定義に従って)処理し、必要なすべてのフィールドに値があることを確認します。 CAST/4から返されるChangesetがデータベースに挿入されます。 ECTO 2では、cast/3およびvalidate_required/3関数をcast/4の代わりに使用する必要があることに注意してください。
<span>def <span>application</span> do
</span> <span>[applications: [:logger, :ecto, :mariaex],
</span> <span>mod: {Notex, []}]
</span><span>end
</span>
結論に関するよくある質問(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ライブラリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。