微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在phoenix elixir中将数据插入或更新到数据库

如何解决在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 举报,一经查实,本站将立刻删除。