2015-06-16 20 views
0

首先:我知道标题没有帮助,但它是我能想到的最好的。
所以我在Symfony一个有两个实体被称为TeamSlot实体有一个名称,开始和结束日期和所有的东西,另一个SlotSymfony实体查询生成器,检查免费点

。除此之外,他还有一个int字段,称为金额,您可以设置能够参与该插槽/回合的团队数量。它还有一个OneToMany连接(双向)到Team实体。

Team实体店的队名和所有的东西,有一个ManyToOne连接到Slot实体(一个惊喜;))

不过,我想有ASIGN一个团队的可能性只需在下拉列表中选择它即可。所以在表格中添加如下内容:

->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个团队已经分配,​​如果你的团队是其中的一个团队,你仍然需要能够选择该项目)。

回答

1

具有做工精细,像这样:

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

我没有做加盟,在某种程度上不得不记住,symfony中/教义会为我做的,并试图做'计数(S .teams)'。谢谢! – wawa