Я выполняю рефакторинг кода для моего приложения.
И я решил изменить стиль функции запроса с помощью |>
в Elixir.
У меня есть функция запроса для запроса sales_items
путем объединения двух разных таблиц Item
и Category
.И все работает нормально.
from(p in SalesItem, join: i in Item, on: p.item_id == i.id,
join: ca in Category, on: i.category_id == ca.id,
where: p.sales_id == ^sales_id,
order_by: [desc: p.id]) |> Repo.all()
Я изменил вышеуказанную функцию, как показано ниже, с использованием оператора pipe.
SalesItem
|> join(:inner, [s], i in Item, s.item_id == i.id)
|> join(:inner, [s, i], ca in Category, i.category_id == ca.id)
|> where([s, i, ca], s.sales_id == ^sales_id)
|> order_by([s, i, ca], [desc: s.id])
|> Repo.all()
Однако вторая функция, написанная мною с использованием оператора канала, вызывает ошибку, (undefined_column): column c1.category_id does not exist
Как решить эту проблему?
-Редактировать, добавлять схемы
schema "sales_items" do
field :item_total, :float, default: 0.0
field :price, :integer
field :quantity, :integer
field :sales_id, Ecto.UUID
field :item_id, Ecto.UUID
field :user_id, Ecto.UUID
field :has_attrs, :boolean, default: false
timestamps()
end
schema "items" do
field :active, :boolean, default: true
field :deleted, :boolean, default: false
field :price, :integer
field :category_id, Ecto.UUID
field :subcategory_id, Ecto.UUID
field :sort_id, :integer
timestamps()
end
schema "categories" do
field :subcategory, :boolean, default: false
field :sort_id, :integer
field :active, :boolean, default: true
timestamps()
end