Doctrine orm 条令ORM-计算查询中的非映射属性

Doctrine orm 条令ORM-计算查询中的非映射属性,doctrine-orm,Doctrine Orm,我有两个相关的实体-线程和回复,用户可以向线程发布回复 当我使用ORM QueryBuilder返回线程实体列表时,我还希望包含一个布尔标志,指示当前用户是否已向该线程发布回复。起初,我考虑在线程实体中添加一个属性,并在查询中以某种方式设置该属性,但感觉线程不需要知道用户发布回复。处理此问题的最佳方法是什么,理想情况下可以避免对返回的每个线程执行二次查询?您可以使用left join with: $qb=$em->getRepository(Thread::class)->createQuery

我有两个相关的实体-
线程
回复
,用户可以向线程发布回复


当我使用ORM QueryBuilder返回线程实体列表时,我还希望包含一个布尔标志,指示当前用户是否已向该线程发布回复。起初,我考虑在
线程
实体中添加一个属性,并在查询中以某种方式设置该属性,但感觉
线程
不需要知道用户发布回复。处理此问题的最佳方法是什么,理想情况下可以避免对返回的每个线程执行二次查询?

您可以使用left join with

$qb=$em->getRepository(Thread::class)->createQueryBuilder('a');
$qb->addSelect('count(r)');
$qb->leftJoin('a.repress','r','WITH','r.user=:userId');
$qb->groupBy('a');
$qb->setParameter('userId',8);
$result=$qb->getQuery()->getResult();
使用
count(r)
您将获得用户在每个线程上发布的回复数量。您必须循环检查结果,以检查计数是否大于0

foreach($result作为$row){
$thread=$row[0];
$hasReplied=($row[1]>0?true:false);
}