检查空闲点的 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()
不幸的是没有完成这项工作。
哦,奖金:
- 如果有 4 个团队分配到一个位置,假设只有两个
地方,它不应该接受任何进一步的(比如当达到全额时)。如果有人更改管理员中的金额,可能会发生这种情况。
- 当然,如果您的团队(当前正在编辑的团队)是最后一个可能的团队,则插槽必须仍然 select可用。 (比如数量是 7,已经分配了 7 个团队,如果您的团队是其中之一,您仍然需要能够 select 该条目)。
像这样可以很好地工作:
$qb->select('s')
->from('FooChallengeBundle:Slot', 's')
->join('s.teams', 't')
->groupBy('s')
->having('count(t) < s.amount')
->getQuery()
->getResult();
首先:我知道标题没有帮助,但这是我能想到的最好的。
所以我在 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()
不幸的是没有完成这项工作。
哦,奖金:
- 如果有 4 个团队分配到一个位置,假设只有两个 地方,它不应该接受任何进一步的(比如当达到全额时)。如果有人更改管理员中的金额,可能会发生这种情况。
- 当然,如果您的团队(当前正在编辑的团队)是最后一个可能的团队,则插槽必须仍然 select可用。 (比如数量是 7,已经分配了 7 个团队,如果您的团队是其中之一,您仍然需要能够 select 该条目)。
像这样可以很好地工作:
$qb->select('s')
->from('FooChallengeBundle:Slot', 's')
->join('s.teams', 't')
->groupBy('s')
->having('count(t) < s.amount')
->getQuery()
->getResult();