gpt4 book ai didi

Elixir Ecto - 如何向上插入/增量

转载 作者:行者123 更新时间:2023-12-01 07:52:36 24 4
gpt4 key购买 nike

我有一个我想在 Phoenix/Elixir 中执行的模型。该模型基本上计算用户花费的金额的滚动总和。模型 ( Receipts ) 如下所示:

---------------
| ID | Amount |
---------------
| 1 | 0 |
| ...| ... |
| 5 | 4 |
---------------
ID 上有一个唯一索引。我想在表中插入一个用户(我定义了 ID),然后如果用户不存在则设置金额,否则将新金额添加到现有金额中。例如,执行:
Repo.insert(Users.changeset(%Users{}, %{ID: 1, Amount: 10})

会导致:
---------------
| ID | Amount |
---------------
| 1 | 11 |
| ...| ... |
| 5 | 4 |
---------------

并执行 Repo.insert(%Users{}, Users.changeset(%{ID: 6, Amount: 5}) 将导致:
---------------
| ID | Amount |
---------------
| 1 | 11 |
| ...| ... |
| 5 | 4 |
| 6 | 5 |
---------------

我知道我应该用 :on_conflict 做一些事情,但我有点迷失了如何把它做好。任何人都可以以正确的方式指出我吗?

最佳答案

当然,这是可能的。它看起来像这样:

iex> amount_to_add = 10
10
iex> Repo.get(User, 1)
nil
iex> Repo.insert(%User{id: 1, amount: amount_to_add}, conflict_target: :id, on_conflict: [inc: [amount: amount_to_add]])
...
iex> Repo.get(User, 1)
%User{id: 1, amount: 10, ...}
iex> Repo.insert(%User{id: 1, amount: amount_to_add}, conflict_target: :id, on_conflict: [inc: [amount: amount_to_add]])
...
iex> Repo.get(User, 1)
%User{id: 1, amount: 20, ...}

关于Elixir Ecto - 如何向上插入/增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42151064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com