【问题标题】:Ecto order_by in preload预加载中的 Ecto order_by
【发布时间】:2019-03-20 01:24:55
【问题描述】:

所以我在使用preload 函数的查询中使用order_by 时遇到问题。

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

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】:

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

    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
    

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

    【讨论】:

    • 完美答案!只是为了对齐命名,它不是 SQL 意义上的 子查询,而是预加载查询的自定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    相关资源
    最近更新 更多