我正在以3个实体分隔的Messenger系统工作
我希望找到与用户A和B的对话,其中两个人都是对话的参与者。知道怎么样? 感谢您阅读:)
答案 0 :(得分:0)
我花了一些时间思考,我花了一个小时才找到解决方案。这也将有助于找到两个用户的共同朋友。
$firstParticipant = $this->_em->createQueryBuilder();
$firstParticipant
->select('pfirst')
->from('EvoMessengerBundle:Participant', 'pfirst')
->where('pfirst.user = :pfirstuser')
->andWhere('pfirst.conversation = c')
;
$secondParticipant = $this->_em->createQueryBuilder();
$secondParticipant
->select('psecond')
->from('EvoMessengerBundle:Participant', 'psecond')
->where('psecond.user = :pseconduser')
->andWhere('psecond.conversation = c')
;
$q = $this->_em->createQueryBuilder();
$q
->select('c')
->from('EvoMessengerBundle:Conversation', 'c')
->where($q->expr()->exists($firstParticipant->getDql()))
->setParameter(':pfirstuser', $first)
->andWhere($q->expr()->exists($secondParticipant->getDql()))
->setParameter(':pseconduser', $second)
->setMaxResults(1)
;
return $q->getQuery()->getResult();