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

标签 php mysql symfony doctrine-orm dql

首先:我知道这个标题没有帮助,但这是我能想到的最好的标题。
所以我在 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/

相关文章:

javascript - jQuery 未在 Wordpress 中定义,但我的脚本已正确排队

php - 页面未从 mysql 中的表中引入正确的行

php - Json 编码对某些列不返回任何内容

mysql - 我需要一个简单的 sql 查询来查找具有特定字符的单词

php - 从 Symfony 2.6 升级到 2.7 : In a ChoiceType, "choices_as_values"有什么作用?

php - Laravel 中间件 : Header may not contain more than a single header, 检测到新行

php - 403 禁止 : You don't have permission to access

php - cPanel PHP 5.1 到 5.4 更改, header (位置 :index. php)

php - 我可以对没有数据库表的实体使用 ResultSetMapping->addEntityResult() 吗?

symfony - 注释 JMS\SecurityExtraBundle\JMS SecurityExtraBundle 不起作用?