Symfony Entity Query builder,用于检查空闲点



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

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

Team实体存储团队名称和所有这些东西,并与Slot实体有ManyToOne连接(多么令人惊讶;))

但是,我希望能够通过简单地在下拉列表中选择将团队分配到时间段。因此,在表单中,我添加了类似以下内容:

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

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

  • 如果有 4 个团队分配给一个插槽,假设只有两个地方,它不应该接受任何进一步(例如当达到全额时)。如果有人更改了管理员中的金额,则可能会发生这种情况。
  • 当然,如果您的团队(当前正在编辑的团队)是最后一个可能的团队,则插槽仍然必须可选。(就像数量是 7,已经分配了 7 个团队,如果您的团队是其中之一,您仍然需要能够选择该条目)。

A 可以像这样正常工作:

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

最新更新