0

使用 Elixir 并拥有两个实体——选民和候选人——它们之间有很多对多(如果重要的话,选民可以投票给很多候选人)。想要获得按选民数量排序的候选人名单。有没有办法使用这样的 Elixir 声明来做到这一点?:

class Voter(Entity):
    votes = ManyToMany('Candidate')

class Candidate(Entity):
    voters = ManyToOne('Voter')

我已经阅读了基于多对多关系的 SQLAlchemy 排序,但希望使用 Elixir 以更清晰的方式进行操作。我希望,这是可能的。

4

1 回答 1

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')
于 2012-02-06T09:41:47.210 回答