Ecto order_by in preload

问题描述 投票:1回答:1

所以我在order_by函数的查询中使用preload时遇到了麻烦。

通常我在这个order_by函数中使用list_member

LIST_MEMBER

def list_members() do
query =
  from(
    p in Member,
    select: p,
    order_by: [desc: p.inserted_at], # descending order
    preload: [:avatar]
  )

Repo.all(query)
end

但在我的get_member_2功能,我不知道在哪里放order_by

def get_member_2!(id) do
query =
  from(
    p in Member,
    where: p.id == ^id,
    select: p,
    preload: [:avatar],
    preload: [:activities] # How to order_by in here
  )

Repo.one!(query)
end
elixir phoenix-framework ecto
1个回答
5
投票

你必须创建一个子查询并在那里订购

def get_member_2!(id) do
  query =
    from(
      p in Member,
      where: p.id == ^id,
      select: p,
      preload: [
        :avatar,
        activities:
          ^from(
            a in Activity,
            order_by: [desc: a.inserted_at]
          )
      ]
    )

  Repo.one!(query)
end

成员和活动的匹配是自动完成的

© www.soinside.com 2019 - 2024. All rights reserved.