首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Ecto中更新时如何使用片段返回值

在Ecto中更新时如何使用片段返回值
EN

Stack Overflow用户
提问于 2016-07-14 12:03:53
回答 2查看 1.8K关注 0票数 0

我需要在数据库中执行一个更新并返回一个值。在RETURNING中使用PostgreSQL关键字是可能的。

由于ecto不支持这一点,所以我想我必须使用片段,但我不知道如何做到这一点。这就是我所拥有的:

代码语言:javascript
运行
复制
query = from(v in MyModel, 
 where: v.id == ^instance_id, 
 update: [
   inc: [counter: 1], 
 ]
)

我想在更新后返回一些字段,例如计数器和id,所以我需要添加到查询中:RETURNING id, counter

EN

Stack Overflow用户

回答已采纳

发布于 2016-07-14 13:08:49

如果使用Ecto.Repo.update_all all/3,则有一个选项:返回以传递字段返回列表

:返回-选择要返回的字段。如果为true,则返回给定结构中的所有字段。可能是字段列表,其中结构仍然返回,但只返回给定字段。或false,其中不返回任何内容(默认值)。并非所有数据库都支持此选项。

执行之后,您可以使用以下内容访问一个元组:

它返回一个包含条目数和作为第二个元素返回的任何结果的元组。如果数据库不支持在UPDATE语句中返回,或者没有选择返回结果,则第二个元素将为零。

就像这样:

代码语言:javascript
运行
复制
result = from(v in MyModel, where: v.id == ^instance_id)
         |> MyRepo.update_all([inc: [counter: 1]], returning: [id, counter])
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38373732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档