Spec-Zone.ru › Phoenix

Базовые операции 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)
← Предыдущая страница Начало работы
Следующая страница → Связи

Пакет Hex Предварительный просмотр Hex (текущий файл) Просмотреть llms.txt Скачать версию ePub

Создано с помощью ExDoc (v0.40.2) для языка программирования Elixir

© 2014 Chris McCord
Licensed under the MIT License.
https://ecto.hexdocs.pm/crud.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API