Ecto 关联空列表

Ecto assoc on empty list

我想获取一堆文章的语言,我从中得到了ID。

我正在尝试这样的事情:

Repo.all(from a in Article, where: a.id in ^article_ids) |> Ecto.assoc(:language) |> Repo.all

当第一次调用 Repo returns 结果时,这工作正常。但是如果第一个 Repo 调用 return 一个空列表,我会得到一个参数错误:

** (ArgumentError) cannot retrieve association :language for empty list

在 Phoenix 中解决这个问题的好方法是什么?

不确定如何使用 Ecto.assoc/1 优雅地执行此操作,但可以使用 JOIN 查询重写您的查询,如下所示:

Repo.all(
  from a in Article,
    join: l in assoc(a, :language),
    where: a.id in ^article_ids,
    select: l
)