RoadMovie

write down memos or something I found about tech things

Ectoチートシート(データ取得系)

EctoとはORマッパーで、DBとのインターフェースになってくれるものです。RailsでいうActiveRecordです。 Phoenix/ElixirはわかりやすいけどEctoで躓く、という方向けのチートシートになります。Rails使いでPhoenix書いてみてる方が多いと思うので、RailsActiveRecord)の文法と比較して載せています。

英語問題ない方はEctoのGetting Startedがめちゃわかりやすいので、そちらを読んでみることをおすすめします。(※下記のサンプルもそちらを抽出したものです)
Getting Started — Ecto v3.1.7

前提として、FriendsというDB内のPeopleというtable(なのでモデル名は単数のPerson)を使った操作です。取得系のみ載せており、create, update, deleteは上記のドキュメントを読んでください。


対象のテーブルの最初の1件を取得

# ActiveRecord
Person.first

# Ecto
Friends.Person |> Ecto.Query.first |> Friends.Repo.one


対象のテーブルの最後の1件を取得

# ActiveRecord
Person.last

# Ecto
Friends.Person |> Ecto.Query.last |> Friends.Repo.one


対象のテーブル全件取得

# ActiveRecord
Person.all

# Ecto
Friends.Person |> Friends.Repo.all


対象のテーブルのid: 1を取得

# ActiveRecord
Person.find(1)

# Ecto
Friends.Person |> Friends.Repo.get(1)


特定カラムの条件で1件取得

# ActiveReocrd
Person.find_by(first_name: “Ryan”)

# Ecto
Friends.Person |> Friends.Repo.get_by(first_name: "Ryan")


特定カラムの条件でフィルタリングし全件取得

# ActiveRecrod
Person.where(last_name: “Smith”)

# Ecto
Friends.Person |> Ecto.Query.where(last_name: "Smith") |> Friends.Repo.all


注意 Ectoで変数名を条件内に使いたい場合は、pin operatorを使う必要があります。

Friends.Person |> Ecto.Query.where(last_name: ^last_name) |> Friends.Repo.all