动态选择地图 Ecto
Dynamically selecting map Ecto
到目前为止我已经创建了查询:
query = from page in "wagtailcore_page",
where: page.url_path == ^url_path,
join: h in ^table_name,
where: h.page_ptr_id == page.id
我现在想在 h
上动态 select 属性
例如,如果我传入 [:body, :footer]
我想 运行:
query = from [_page, h] in query,
select: %{body: h.body, footer: h.footer}
我发现 Ecto.Query.API.map 看起来可以用来解决这个问题。
但是当我运行:
from [_page, h] in query, select: EctoApi.map(h, [:body])
我收到错误:
** (Ecto.Query.CompileError) `EctoApi.map(h, [:alphatext])` is not a valid query expression
根据 map
documentation 底部的 IMPORTANT
消息,我们必须在执行连接时包含关系中使用的外键,但我没有这样做知道如何为我们正在做的动态连接类型做这种类型的 assoc
map
可以在不导入任何东西的情况下使用。实际功能在 Ecto 内部实现,Ecto.Query.API.map/2
仅用于文档目的。以下应该有效:
from [_page, h] in query, select: map(h, [:body, :footer])
到目前为止我已经创建了查询:
query = from page in "wagtailcore_page",
where: page.url_path == ^url_path,
join: h in ^table_name,
where: h.page_ptr_id == page.id
我现在想在 h
例如,如果我传入 [:body, :footer]
我想 运行:
query = from [_page, h] in query,
select: %{body: h.body, footer: h.footer}
我发现 Ecto.Query.API.map 看起来可以用来解决这个问题。
但是当我运行:
from [_page, h] in query, select: EctoApi.map(h, [:body])
我收到错误:
** (Ecto.Query.CompileError) `EctoApi.map(h, [:alphatext])` is not a valid query expression
根据 map
documentation 底部的 IMPORTANT
消息,我们必须在执行连接时包含关系中使用的外键,但我没有这样做知道如何为我们正在做的动态连接类型做这种类型的 assoc
map
可以在不导入任何东西的情况下使用。实际功能在 Ecto 内部实现,Ecto.Query.API.map/2
仅用于文档目的。以下应该有效:
from [_page, h] in query, select: map(h, [:body, :footer])