我有两个相关实体 - Thread
和Reply
,用户可以发布对帖子的回复。
当我使用ORM QueryBuilder返回线程实体列表时,我还希望包含一个布尔标志,指示当前用户是否已发布对该线程的回复。最初我考虑过向Thread
实体添加一个属性,并以某种方式在查询中设置它,但它并不觉得Thread
应该知道发布回复的用户。解决这个问题的最佳方法是什么,理想情况下,每个线程返回时需要执行二次查询?
答案 0 :(得分:0)
您可以使用左连接:
$qb = $em->getRepository(Thread::class)->createQueryBuilder('a');
$qb->addSelect('count(r)');
$qb->leftJoin('a.replies', 'r' , 'WITH', 'r.user = :userId');
$qb->groupBy('a');
$qb->setParameter('userId', 8);
$result = $qb->getQuery()->getResult();
使用count(r)
,您将获得用户每个帖子发布的回复数量。您必须遍历结果以检查计数是否>> 0
foreach($result as $row) {
$thread = $row[0];
$hasReplied = ($row[1] > 0 ? true: false);
}