从Ecto中的查询中获取主键

时间:2017-09-20 10:20:47

标签: elixir phoenix-framework ecto

我想从查询中动态获取主键。我有一个想法。首先,我从查询中获取模式(我不知道,如何)。之后,我从架构中获取表名:

{_, table_name} = %Core.Schema{}.__meta__.source

并发送SQL,它将获得主键。 所以,三个问题诞生了:

  1. 有没有办法从查询中获取架构(以及获取表名后)

  2. 直接从查询中获取表名?

  3. Ecto.primary_key()不能处理查询,也许还有其他方法?

1 个答案:

答案 0 :(得分:3)

如果查询是使用架构模块构建的(即from(p in Post),而不是from(p in "posts")),则可以使用查询的from字段恢复模块:

iex(1)> query = from(p in Post, where: p.id == 1)
#Ecto.Query<from p in MyApp.Post, where: p.id == 1>
iex(2)> %{from: {_table, module}} = query
#Ecto.Query<from p in MyApp.Post, where: p.id == 1>
iex(3)> module
MyApp.Post

要获取模块架构中定义的主键,您可以在模块上调用.__schema__(:primary_key)

iex(4)> module.__schema__(:primary_key)
[:id]