gpt4 book ai didi

php - 用于检查空闲位置的 Symfony 实体查询构建器

转载 作者:行者123 更新时间:2023-11-29 12:09:58 25 4
gpt4 key购买 nike

首先:我知道这个标题没有帮助,但这是我能想到的最好的标题。
所以我在 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(\Foo\ChallengeBundle\Entity\SlotRepository $er) {
return $er->createQueryBuilder('u')
->where('u.bookable = 1')
->andWhere('u.hide = 0');
}
))

这项工作就像一个魅力!我剩下的唯一问题是确定该插槽是否已被占用。举例来说,我们将槽位数量设置为 3。我们进一步假设已经有 3 个团队分配到该槽位。在这种情况下,我不想在下拉列表中显示该选项。那么我需要在 QueryBuilder 中做什么来测量它呢?我尝试添加 having() ,但不幸的是没有完成这项工作。
哦,奖励内容:

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

最佳答案

拥有会像这样工作得很好:

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

关于php - 用于检查空闲位置的 Symfony 实体查询构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com