ecto cheat sheet (작성중)


```elixir
alias BikeRide.Repo # 이렇게 쓰는 것은 아래의 축약형이다.
alias BikeRide.Repo as: Repo
alias BikeRide.Accounts.User

# id로 user를 select 한다
User |> Repo.get(1)

# 음 아래로 할때 get_by에서 찾을 수 있는게 1개가 아니면 에러가 난다. 
User |> Repo.get_by(name: "someone")


#
User |> Repo.first |> Repo.one

User |> Repo.all

User |> where(name: "someone") |> Repo.all

User |> (where [u], u.updated_at < ^today) |> Repo.all

User |> (where [u], ilike(u.name, "%name") |> Repo.all

User |> Repo.aggregate(:count, :id)
```

```elixir
Import Ecto.query

User |> group_by(:name) |> select([u], [u.name, count(u.id)] |> Repo.all

User |> group_by(:name) |> select([u], [u.name, count(u.id)] |> Repo.all

User |> distinct ([u], u.name) |> Repo.all

Limit = 4
User |> limit(^Limit) |> Repo.all

# 아래는 changeset의 validation을 거치지 않는다,
%User{name: "stephan"} |> Repo.insert 


# changeset을 통해 validation user changeset을 정의 하기는 해야함,
import Ecto.changeset
User.changeset(%User{}, %{name: "..."}) |> Repo.insert
User.changeset(%User{}, %{name: "..."}, email: "...", phone: "...") |> Repo.insert

# update
someone = User |> Repo.get_by(name: "someone")
User.changeset(someone, %{name: "test"} |> Repo.update

# delete
test = User |> Repo.get_by(name: "test")
test |> Repo.delete

# multiple change with transaction
m = User |> Repo.get_by(name: "test1")
s = User |> Repo.get_by(name: "test2")

Repo.transction( fn ->
  User.changeset(s, %{email: "..") |> Repo.update
  User.changeset(m, %{email: "..") |> Repo.update
end

# Association
## referencing

alias Bikeride.Delivery.Campaign

campaign = Campaign |> Repo.get(1)
campaign.tasks # not loaded

campaign = Campaign |> Repo.get(1) |> Repo.preload(:tasks)
campaign.tasks # loaded

## Association 선언 등에 관련 된 것들은 나중에 따로..


```

댓글

이 블로그의 인기 게시물

엘릭서 Phoenix migration (1.5 -> 1.6 and scss for esbuild)

윈도우 디스크 관리세어 삭제 불가능 파티션 삭제 (필요해서 찾아봄)