【发布时间】:2017-02-24 08:24:43
【问题描述】:
我使用 Ecto 在 Elixir/Phoenix 中运行了一系列复杂的查询。这些目标是使这些查询既可以用于创建新条目,也可以用于更新以前的行。为此,我设想使用一个函数参数来定义我们是否正在更新表。例如,现在我有以下功能:
# Retrieves the stats on the user chargebacks
defp get_chargebacks(%{user_id: user_id} = map) do
query =
from u in Users,
left_join: c in ChargeBacks, on: [user_id: u.id],
where: u.id == ^user_id,
select: %{chargeback_amount_cents: sum(c.amount), chargeback_amount_count: count(c.user_id), chargeback_amount_currency: @default_currency},
group_by: u.id
result = query
|> RepoBVCore.one
Map.merge(map, Map.put(result, :chargeback_amount_cents, Map.get(result, :chargeback_amount_cents) || 0))
end
我想更改函数,使其如下:
defp get_chargebacks(%{user_id: user_id} = map, is_update \\ false)
如果is_update = true 那么我想在函数中添加一个额外的where 子句(例如):
where: c.amount > 100
如何更改我的原始函数以有条件地更改查询语句?谢谢。
【问题讨论】:
标签: elixir phoenix-framework ecto