使用Elixir并拥有两个实体 - 选民和候选人 - 他们之间有多对多(如果重要,选民可以投票给许多候选人)。想要获得根据选民数量排序的候选人名单。有没有办法使用这样的Elixir声明?:
class Voter(Entity):
votes = ManyToMany('Candidate')
class Candidate(Entity):
voters = ManyToOne('Voter')
我读过SQLAlchemy ordering by count on a many to many relationship但想要用Elixir更清楚地做到这一点。我希望,这是可能的。
答案 0 :(得分:1)
只有这样我才能发现在Elixir中通过多对多关系进行排序可以从关系中找出辅助表,并且“就像在炼金术中一样”。大概是这样的:
secondr_table = Candidate._descriptor.find_relationship('voters').secondary_table
cands_by_rank = (
session.query(
Candidate.id,
func.count(secondr_table.c.candidate_id).label('total')
)
.join(secondr_table)
.group_by(Candidate)
.order_by('total DESC')