首页 > 解决方案 > 如何使用结构从关联中选择给定模型的所有字段以及选定字段以避免过度获取

问题描述

在这个查询中,有没有办法Candidate在 select 中定义 struct 的所有字段?(* 由字段列表替换):

from([candidate: candidate, zone: zone, batch: batch, region: region] in query,
 join: af in assoc(zone, :af),
 join: zc in assoc(zone, :zc),
 join: cc_zone in assoc(candidate, :cc_zone),
 join: training_language in assoc(candidate, :training_language),
 join: state in assoc(candidate, :state),
 left_join: interview in assoc(candidate, :interview),
 preload: [
   zone: zone,
   batch: batch,
   training_language: training_language,
   state: state
 ],
 select: 
  struct(
    candidate,
    [
      *,
      training_language: [:id, :name],
      batch: [:id, :identifier],
      zone: [:id, :code],
      state: [:id, :code]
    ]
  )
)

还是我们需要手动添加候选人表中的所有字段?

--

在 slack 中收到的一项建议没有按预期工作:

select: canditate
select_merge: struct(
    candidate,
    [
      training_language: [:id, :name],
      batch: [:id, :identifier],
      zone: [:id, :code],
      state: [:id, :code]
    ]
)

这将返回候选结构,其中包含来自所有预加载关联的所有字段

标签: elixirecto

解决方案


select: candidate应该选择候选人的所有领域。此外,由于您预加载了所有必要的关联,它们也将被自动选择。


推荐阅读