检查空闲点的 Symfony 实体查询生成器

Symfony Entity query builder that checks for free spots

首先:我知道标题没有帮助,但这是我能想到的最好的。
所以我在 Symfony 中有两个实体,一个叫 Team,另一个叫 Slot

Slot 实体有名称、开始和结束日期以及所有这些东西。除此之外,他还有一个名为 amount 的 int 字段,您可以在其中设置能够参与该 slot/round 的团队数量。它还具有到 Team 实体的 OneToMany 连接(双向)。

Team 实体存储团队名称和所有相关内容,并与 Slot 实体建立 ManyToOne 连接(真令人惊讶 ;))

但是,我希望能够通过在下拉列表中简单地 select 将团队分配到一个时间段。所以在表格中我添加了这样的东西:

->add('slot', 'entity', array(
    'label'             => 'Zeitslot',
    'class'             => 'FooChallengeBundle:Slot',
    'property'          => 'output',
    'query_builder'     => function(\Foo\ChallengeBundle\Entity\SlotRepository $er) {
        return $er->createQueryBuilder('u')
                ->where('u.bookable = 1')
                ->andWhere('u.hide = 0');
    }
))

这项工作就像一个魅力!我剩下的唯一问题是弄清楚插槽是否已占用。比方说,我们已将插槽数量设置为 3。进一步假设已经有 3 个团队分配给该插槽。在那种情况下,我不想在下拉列表中显示该选项。那么我必须在 QueryBuilder 中做什么来衡量呢?我试图添加一个 having() 不幸的是没有完成这项工作。
哦,奖金:

像这样可以很好地工作:

    $qb->select('s')
        ->from('FooChallengeBundle:Slot', 's')
        ->join('s.teams', 't')
        ->groupBy('s')
        ->having('count(t) < s.amount')
        ->getQuery()
        ->getResult();