У меня есть следующие запросы:
def user_contacts(provider_id, filter) do
query =
from(
u in User,
preload: [:groups],
where: u.provider_id == ^provider_id and u.type != "company"
)
query
|> filter_sector(filter)
|> filter_availability(filter)
end
defp filter_sector(query, %{"sector" => "Asset Management & Investment Funds"}) do
query
|> join(:inner, [u], p in Profile, p.user_id == u.id)
|> where([u, p], fragment("(sectors->>'asset' = ?)", "true"))
end
defp filter_sector(query, _), do: query
defp filter_availability(query, %{"availability" => "now"}) do
query
|> join(:inner, [u], p in Profile, p.user_id == u.id)
|> where([u, p], ^Date.utc_today >= p.placement_availability)
end
defp filter_availability(query, _), do: query
Я получаю следующую ошибку: ERROR 42702 (ambiguous_column): column reference "sectors" is ambiguous
.sectors
- это встроенная схема в Profile
.
Моя попытка исправить это - переработать структуру запроса filter_sector
в следующее:
from(
q in query,
join: p in Profile,
on: p.user_id == q.id,
where: fragment("(sectors->>'asset' = ?)", "true")
)
, но я до сих порполучить ту же ошибку.Странно, когда фильтр имеет только значение «сектор» или значение «доступность», в котором работает запрос, но когда присутствуют оба значения, возникает ошибка.