在many_to_many关系上过滤预加载

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

我有两个模型:UserGroupUser,与many_to_many关系。

在我的UserGroup索引操作中,我执行以下操作:

user_groups =
  UserGroup
  |> Repo.all
  |> Repo.preload(:users)

并且,在视图中,在渲染用户组时,我执行以下操作:

def render("index.json", %{user_groups: user_groups}) do
  %{
    user_groups:
      Enum.map(user_groups, fn user_group ->
        %{
          id: user_group.id,
          name: user_group.name,
          users: user_group.users
        }
      end)
  }
end

更改!现在用户有一个状态,我想只显示active用户。

如何“预定”用户的预加载,以便仅显示具有active状态的用户?

elixir phoenix-framework ecto
1个回答
1
投票

您可以使用所需的Repo.preload子句将部分查询传递给where。假设“活跃”用户有user.status == "active",你可以这样做:

user_groups =
  UserGroup
  |> Repo.all
  |> Repo.preload(users: from(u in User, where: u.status == "active"))

您可以在documentation中阅读更多相关信息。

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