Bonjour, merci de ta réponse !
j'ai saisi le raisonnement cependant cette requète génère une erreur au niveau du COUNT(u.di).
An exception occurred while executing 'SELECT c0_.id AS id0 FROM conversation c0 INNER JOIN conversationuser c2 ON c0.id = c2.conversationid INNER JOIN user u1 ON u1.id = c2.userid GROUP BY c0.id HAVING ? = COUNT(u1.id) AND u1.id IN (?, ?)' with params [2, 1, 2]:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'u1_.id' in 'having clause'
InvalidFieldNameException: An exception occurred while executing 'SELECT c0_.id AS id_0 FROM conversation c0_ INNER JOIN conversation_user c2_ ON c0_.id = c2_.conversation_id INNER JOIN user u1_ ON u1_.id = c2_.user_id GROUP BY c0_.id HAVING ? = COUNT(u1_.id) AND u1_.id IN (?, ?)' with params [2, 1, 2]
Ce qui est logique car doctrine passe par une table intermèdiaire pour modéliser la relation conversation -> User.
J'ai pour l'instant pu contourner le problème comme ceci :
public function findConversation($userids)
{
$qb = $this->createQueryBuilder('c')
->innerJoin('c.messages', 'm')
->addSelect('m')
->innerJoin('c.members', 'u')
;
foreach($userids as $id)
{
$qb->orWhere($qb->expr()->eq('u.id', $id));
}
$qb->distinct();
$results = $qb->getQuery()->getResult();
foreach($results as $conversation)
{
$ids = $conversation->getMembersIds();
sort($ids);
sort($userids);
if($ids === $userids)
{
return $conversation;
}
}
return null;
}
Mais je ne sais pas quel seras l'impact de cette méthode niveau performance dans le cas ou il y a un nombre important de conversation .
En tous cas merci de ton aide !