获取与 elixir 和 phoenix 的关联计数
Getting an association count with elixir and phoenix
我正在尝试查找我的应用程序中有多少支球队属于一个联盟。我似乎找不到这个问题的答案。这是我们的模型:
League.ex
defmodule Statcasters.League do
use Ecto.Schema
import Ecto
import Ecto.Changeset
import Ecto.Query
schema "leagues" do
field :name, :string
has_many :teams, Statcasters.Teams.Team
belongs_to :user, Statcasters.Coherence.User
end
Team.ex
defmodule Statcasters.Teams.Team do
use Ecto.Schema
import Ecto.Changeset
alias Statcasters.Teams.Team
schema "teams" do
field :name, :string
belongs_to :league, Statcasters.League
belongs_to :user, Statcasters.Coherence.User
timestamps()
end
end
我正在尝试查找某个特定联赛有多少支球队。如果这是 Rails,我会这样做 League.first.teams.count
。我如何使用 Elixir、Phoenix 和 Ecto 做到这一点?
我是 Ecto 新手,但这是我的第一次尝试,但没有成功。
def league_limit(league) do
count = from l in league,
left_join: t in assoc(l, :teams),
group_by: l.id,
select: {l, count(t.id)}
end
I'm trying to find how many teams a particular league has.
假设 league_limit
的 league
参数是一个加载的 %League{}
结构,添加一个 where:
子句以将其缩小到您传入的联赛:
def league_limit(league) do
count =
from l in League,
where: l.id == ^league.id,
left_join: t in assoc(l, :teams),
group_by: l.id,
select: {l, count(t.id)}
end
我正在尝试查找我的应用程序中有多少支球队属于一个联盟。我似乎找不到这个问题的答案。这是我们的模型:
League.ex
defmodule Statcasters.League do
use Ecto.Schema
import Ecto
import Ecto.Changeset
import Ecto.Query
schema "leagues" do
field :name, :string
has_many :teams, Statcasters.Teams.Team
belongs_to :user, Statcasters.Coherence.User
end
Team.ex
defmodule Statcasters.Teams.Team do
use Ecto.Schema
import Ecto.Changeset
alias Statcasters.Teams.Team
schema "teams" do
field :name, :string
belongs_to :league, Statcasters.League
belongs_to :user, Statcasters.Coherence.User
timestamps()
end
end
我正在尝试查找某个特定联赛有多少支球队。如果这是 Rails,我会这样做 League.first.teams.count
。我如何使用 Elixir、Phoenix 和 Ecto 做到这一点?
我是 Ecto 新手,但这是我的第一次尝试,但没有成功。
def league_limit(league) do
count = from l in league,
left_join: t in assoc(l, :teams),
group_by: l.id,
select: {l, count(t.id)}
end
I'm trying to find how many teams a particular league has.
假设 league_limit
的 league
参数是一个加载的 %League{}
结构,添加一个 where:
子句以将其缩小到您传入的联赛:
def league_limit(league) do
count =
from l in League,
where: l.id == ^league.id,
left_join: t in assoc(l, :teams),
group_by: l.id,
select: {l, count(t.id)}
end