首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ecto在关联上的运行位置

Ecto在关联上的运行位置
EN

Stack Overflow用户
提问于 2018-05-30 04:42:36
回答 1查看 107关注 0票数 0

我正在运行一个类似这样的查询:

query = from q in MY.Model, preload: [:accoc], where: q.accoc_field in [10, 11]
Repo.all(query)

这给了我一个错误:

** (Ecto.QueryError) iex:32: field `accoc_field` in `where` does not exist in schema MY.Model in query:

因此,基本上我尝试编写一个查询,如下所示:

select * from my_model m join assoc a on m.assoc_id = a.id where a.assoc_field in (10, 11)

我知道我可以在Ecto中使用joins来编写上述查询,但是在使用preload时我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-30 07:11:50

我希望这里最好的解决方案是直接跟随SQL代码前进。

我们需要连接另一个表,所以我们需要调用Ecto.Query.join/5函数,而不是预加载。

例如,假设我们需要检索用户,这些用户创建了具有特定部分的帖子:

from u in User,
join: p in assoc(u, :posts),
where: p.section in ["elixir", "phoenix"],
select: u

在此查询的Repo.all之后,我们将获得所需用户的列表。在这里,如果我们想用帖子填充用户-我们可以调用Repo.preload

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50592611

复制
相关文章

相似问题

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