Базовые операции CRUD
Исходный кодВ этом документе «Внутренние данные» — это данные или логика, жестко заданные в коде Elixir. «Внешние данные» — это данные, поступающие от пользователя через формы и API; их часто нужно нормализовать, очистить и проверить с помощью Ecto.Changeset.
Получение записей
Одна запись
Получение записи по идентификатору
Repo.get(Movie, 1)
Получение записи по атрибутам
Repo.get_by(Movie, title: "Ready Player One")
Получение первой записи
Movie |> Ecto.Query.first() |> Repo.one()
Получение последней записи
Movie |> Ecto.Query.last() |> Repo.one()
Используйте !, чтобы вызвать исключение, если запись не найдена
Repo.get!(Movie, 1) Repo.get_by!(Movie, title: "Ready Player One") Movie |> Ecto.Query.first() |> Repo.one!()
Несколько записей
Получение всех записей за один раз
Movie |> Repo.all()
Потоковое получение всех записей
Movie |> Repo.stream() |> Enum.each(fn record -> ... end)
Проверка наличия хотя бы одной записи
Movie |> Repo.exists?()
Выполнение запросов к записям
Запросы на основе ключевых слов
Запросы без привязки
query = from Movie, where: [title: "Ready Player One"], select: [:title, :tagline] Repo.all(query)
Привязки в запросах
query = from m in Movie, where: m.title == "Ready Player One", select: [m.title, m.tagline] Repo.all(query)
Интерполяция с помощью ^
title = "Ready Player One" query = from m in Movie, where: m.title == ^title, select: [m.title, m.tagline] Repo.all(query)
Запросы с использованием конвейера
Movie
|> where([m], m.title == "Ready Player One")
|> select([m], {m.title, m.tagline})
|> Repo.allДобавление записей
Одна запись
Использование внутренних данных
%Person{name: "Bob"}
|> Repo.insert()
Использование внешних данных
# Params represent data from a form, API, CLI, etc
params = %{"name" => "Bob"}
%Person{}
|> Ecto.Changeset.cast(params, [:name])
|> Repo.insert()Несколько записей
data = [%{name: "Bob"}, %{name: "Alice"}]
Repo.insert_all(Person, data)Обновление записей
Одна запись
Использование внутренних данных
person =
Person
|> Ecto.Query.first()
|> Repo.one!()
changeset = change(person, %{age: 29})
Repo.update(changeset)
Использование внешних данных
# Params represent data from a form, API, CLI, etc
params = %{"age" => "29"}
person =
Person
|> Ecto.Query.first()
|> Repo.one!()
changeset = cast(person, params, [:age])
Repo.update(changeset)Несколько записей (с помощью запросов)
Repo.update_all(Person, set: [age: 29])
Удаление записей
Одна запись
person = Repo.get!(Person, 1) Repo.delete(person)
Несколько записей (с помощью запросов)
Repo.delete_all(Person)
© 2014 Chris McCord
Licensed under the MIT License.
https://ecto.hexdocs.pm/crud.html