在 DQL 查询中添加 select 个当前用户与其他用户共有的事件

Add select COUNT events in common between the current user and the others in DQL query

我在 Symfony 4 项目中有这个 DQL 查询,它 select 所有在与当前用户相同的事件中注册的用户

$query = $this->_em->createQuery(
    "select u as user, er.dateRegistration from App:EventRegistration er 
     left join App:User u with er.user = u.id
     where er.user != :user_id and 
     er.event in (select identity(er2.event) from App:EventRegistration er2 
     where er2.user = :user_id)")
->setParameter('user_id', $user->getId());

return $query->getResult();

现在,在同一查询中,我想 select COUNT 每个其他用户在同一事件中注册了多少次当前用户。

我指的是当前用户和其他用户共同事件的数量。

如果我将 count(er.id) 添加到 select

select u as user, er.dateRegistration, count(er.id)

我收到这个错误:

SQLSTATE[42803]: Grouping error: 7 ERREUR: la colonne « u0_.username » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat LINE 1: SELECT u0_.username AS username_0, u0_.username_canonical AS..

您需要添加分组依据;

$query = $this->_em->createQuery(
  "select u as user, count(er.id) as register_count from App:EventRegistration er 
  left join App:User u with er.user = u.id
  where er.user != :user_id and 
  er.event in (select identity(er2.event) from App:EventRegistration er2 
  where er2.user = :user_id) group by u.id")
->setParameter('user_id', $user->getId());

return $query->getResult();

它将为您提供每个用户的注册计数,但在这种情况下,您无法公开“er.dateRegistration”,因为现在您正在为每个用户分组计数。