【问题标题】:Update multiple records using ecto 2.0使用 ecto 2.0 更新多条记录
【发布时间】:2016-10-16 08:42:43
【问题描述】:

我可以在 ecto 2.0 中插入多条记录:

iex(1)> categories = [%{name: "stackoverflow", url: "stackoverflow.com"}]

iex(2)> App.Repo.insert_all App.Category, categories

是否可以一次更新多条记录?

iex(1) > category = App.Repo.all(App.Category) |> hd

iex(2) > changeset = App.Category.changeset(category, %{name: "test"})

iex(3)> App.Repo.insert_all App.Category, [changeset]

我有一个场景,我必须在抓取外部页面后每天插入或更新类别。似乎 Ecto 2.0 中有Multi 功能。任何关于如何去做的指示?

【问题讨论】:

  • 但是 update_all(基于查询)与 insert_all(基于列表)有很大不同...不存在基于列表的 update_all?

标签: elixir phoenix-framework ecto


【解决方案1】:

正如有insert_all/3 函数一样,也有update_all/3 函数。 update_all/3 采用可查询(%MyApp.SomeModel{} 或查询)、更新关键字列表 ([name: "John"]) 和可选关键字列表选项。

【讨论】:

  • 但是 update_all(基于查询)与 insert_all(基于列表)非常不同......不存在基于列表的 update_all?
  • @Nuno_Coletiv 听起来你正在寻找一个 upsert。请参阅hexdocs.pm/ecto/Ecto.Repo.html#c:insert_all/3 的 Upsert 部分
  • 我读到过,但是当尝试发送一个带有 id 和没有 id 的对象的列表时... insert_all 总是尝试插入,因为当列表中的对象已填充 id 时,会给我错误“此 id 已经存在”?!?!
  • 听起来是一个值得在 SO 上发布的问题,尽可能详细地说明您正在做什么。
猜你喜欢
  • 2022-01-13
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2016-05-01
  • 2013-05-02
  • 2014-03-04
  • 1970-01-01
相关资源
最近更新 更多