如何在select count(...)中使用表达式? (教义)

时间:2018-11-26 19:35:47

标签: php sql doctrine-orm

我有UserUserGroup实体。每个用户都有一个组(UserGroup),每个用户都有一个老板(User)。

我想获取一个群组列表,并确定当前用户是否是该群组中某人的老板。我已经在SQL中实现了它,现在我尝试使用Doctrine解决它。这是我尝试过的:

$qb = em()->createQueryBuilder()
    ->select(array('gr.id AS group_id', 'gr.name AS group_name', 'COUNT(us.boss = :current_user_id)>0 AS is_boss'))
    ->from('\App\Entity\UserGroup', 'ug')
    ->leftJoin('\App\Entity\User', 'us', 'WITH', 'us.group = ug.id')

    ->setParameter('current_user_id', $_SESSION['uid'])

    ->groupby('gr.id')
;

$groups = $qb->getQuery()->getScalarResult();

不幸的是,我遇到了QueryException,但是我不知道该如何解决。怎样在COUNT(...)函数中放入表达式?

1 个答案:

答案 0 :(得分:1)

您可以使用Mysql case function进行此操作:

$queryBuilder->addSelect('case when COUNT(case when us.boss = :current_user_id then 1 else 0 end)>0 then 1 else 0 end AS is_boss');

参考