Ecto:使用has_many关联对集合中的预加载数据进行排序

时间:2017-04-10 18:14:12

标签: elixir phoenix-framework ecto

假设我有这个用于获取所有线程:

Thread |> Thread.ordered |> Repo.all |> Repo.preload([:posts])

我如何为:posts提供order_by子句?我似乎无法在引用Ecto.Repo.preload/1的文档中找到任何内容,因此所提供的示例都不会对确定如何正确使用此语法有帮助。

1 个答案:

答案 0 :(得分:9)

Ecto.Query模块可以非常轻松地将某些查询应用于预加载等事项。

我们实现这一目标的方法是通过将查询传递到预加载函数,然后将预加载的结果限制为该查询。

例如,在您的情况下:

import Ecto.Query # => Needed to use the ecto query helpers

Thread 
|> Thread.ordered 
|> Repo.all 
|> Repo.preload([posts: (from p in Post, order_by: p.published_at)])

(假设您在帖子上发布了字段)