使用 Ecto 查询查找属于特定用户的联赛
Use an Ecto query to find what leagues belong to a particular user
我有 User
和 League
它们通过 has_many 到 users_leagues
相互关联。非常基本的设置。
但现在我正在尝试查询与特定用户有关联的联赛。因此,如果 User A
与 league A
有关系但与 League B
没有关系,我只想在查询联赛时看到 League A
。
这是其中一个案例,Rails 似乎是一种更简单的方法。在 rails 中,这将是:@leagues = current_user.leagues
`
这是我目前的尝试:
def my_leagues(conn, _params) do
current_user_id = Coherence.current_user(conn).id
query = from l in League,
select: l
leagues = query |> where([l], l.users == ^current_user_id) |> Repo.preload(:users)|> Repo.all
render(conn, "my_leagues.html", leagues: leagues)
end
错误:
no match of right hand side value: #Ecto.Query<from l in Statcasters.League, where: l.users == ^1, select: l>
Ecto.Query.join/5
接受关联作为 join
值:
query = from l in League,
left_join: u in assoc(l, :users),
where: u.id == ^current_user_id.
select: l
我有 User
和 League
它们通过 has_many 到 users_leagues
相互关联。非常基本的设置。
但现在我正在尝试查询与特定用户有关联的联赛。因此,如果 User A
与 league A
有关系但与 League B
没有关系,我只想在查询联赛时看到 League A
。
这是其中一个案例,Rails 似乎是一种更简单的方法。在 rails 中,这将是:@leagues = current_user.leagues
`
这是我目前的尝试:
def my_leagues(conn, _params) do
current_user_id = Coherence.current_user(conn).id
query = from l in League,
select: l
leagues = query |> where([l], l.users == ^current_user_id) |> Repo.preload(:users)|> Repo.all
render(conn, "my_leagues.html", leagues: leagues)
end
错误:
no match of right hand side value: #Ecto.Query<from l in Statcasters.League, where: l.users == ^1, select: l>
Ecto.Query.join/5
接受关联作为 join
值:
query = from l in League,
left_join: u in assoc(l, :users),
where: u.id == ^current_user_id.
select: l