如何解决在phoenix elixir中将数据插入或更新到数据库
我已经在数据库中找到了它:
[
%Element{id: 1,posx: 1,posy: 2,count1: 100,count2: 500,timestamps...},%Element{id: 2,posx: 2,count1: 150,count2: 450,%Element{id: 3,posx: 3,count1: 50,count2: 300,timestamps...}
]
现在,当我添加新数据时
Repo.insert{posx: 3,count1: 25 count2: 125}
我想更新posx和posy相同的现有条目,并添加两个新的计数值。 因此我的数据库应如下所示:
[
%Element{id: 1,count1: 75,count2: 425,timestamps...}
]
如果不存在posx和posy相同的条目,我只想向数据库中插入一个新条目。
那我该如何实现呢?
解决方法
您应该选择然后更新或插入。
q = from(Element,where: [posx: 3,posy: 2])
case Repo.one(q) do
nil ->
Repo.insert(...)
%Element{count1: count1} = e ->
e = Ecto.Changeset.change(e,count1: count1 + 25)
Repo.update(e)
end
,
它应该是Repo.insert(struct_or_changeset,opts),如文档https://hexdocs.pm/ecto/Ecto.Repo.html#c:insert/2
中所述所以,请改试试
4.0.1
如果要检查数据是否存在,如果要更新,请使用on_conflict选项。
大概是这样。
Repo.insert(%Element{id: 3,posx: 3,posy: 2,count1: 25 count2: 125})
请参阅文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。