```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 선언 등에 관련 된 것들은 나중에 따로..
```
댓글
댓글 쓰기