具有manyTomany关系和计数功能的Symfony查询构建器

问题描述 投票:0回答:1

我的课程实体和用户实体中有一个 ManyTomany 关系。 课程实体具有值成员和用户实体 gameRounds。在我的课程实体中,我还将 maxMembers 值设置为整数。 现在我想使用查询生成器和课程值 k 和用户值 u 进行教义查询,以测试课程成员的数量是否小于值 maxMembers。

 $qb->innerJoin('k.members','u');
    $qb->andWhere('k.id in (u.gameRounds)');
    $qb->addSelect('count(u.id) as countValue');
    $qb->andWhere('countValue <  :maxMembers');
    $qb->setParameter('maxMembers','k.maxMembers');

我已经测试了这个代码。但服务器给了我一个错误

[Semantical Error] line 0, col 144 near 'gameRounds) AND': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.

现在我更进一步了:

   $qb->join('k.members','u');
   $qb->having('count(u) < k.maxMembers');
   $qb->groupBy('k.id');

这似乎有效,但仅适用于表中至少有一个值的条目。如何比较表中没有值的条目和 count 值为空的条目? 我试过了

 $qb->having('ISNULL(count(u),0) < k.maxMembers');

但是出现错误:

[Syntax Error] line 0, col 123: Error: Expected known function, got 'ISNULL'
php symfony doctrine-orm
1个回答
0
投票
$qb->leftJoin('k.members','u');
$qb->having('count(u.id) < k.maxMembers');
$qb->groupBy('k.id');
© www.soinside.com 2019 - 2024. All rights reserved.