Функция Ecto-запроса с использованием оператора pipe в Elixir - PullRequest
0 голосов
/ 10 июня 2018

Я выполняю рефакторинг кода для моего приложения.

И я решил изменить стиль функции запроса с помощью |> в 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      
...