Repo.update_all 之后 Ecto 中的 Updated_at

Mr *_*r H 4 elixir ecto

我需要更新我的Asset表,所以我需要做这样的事情。

from(a in Asset, 
where: a.id == ^asset.id, 
update: [set: [asset_name: "a name"] ]
)
|> Repo.update_all([])
Run Code Online (Sandbox Code Playgroud)

这工作正常,但updated_at没有更新。

从文档中:

请记住,此 update_all 不会更新自动生成的字段,例如 Updated_at 列。

那么这是否意味着我需要将时间传递到查询中?就像是DateTime.utc_now

谢谢

NoD*_*ame 5

是的,您需要自动更新时间戳,因此它应该类似于:

Asset
|> where([a], a.id == ^asset.id)
|> update([set: [asset_name: "a name", updated_at: Timex.now()]])
|> Repo.update_all([])
Run Code Online (Sandbox Code Playgroud)

我在这里使用Timex.now(),但我想它DateTime.utc_now()也会工作得很好,但我还没有测试过。

如果您经常这样做,我可能会创建一个通用函数来接受查询并向其添加时间戳更新并返回更新后的查询。