我有类似的问题和数据库结构:带有条件的 Doctrine2 关联映射但是,我需要带有批准评论的文章集合:如何在没有 N+1 的情况下进行关联映射?$articles = $repository->findAllArticlesWithApprovedComments(); Foreach($articles as $article){ $article->getTitle(); foreach($article->getAprovedComments() as $comment){ $comment->getText(); } }如果我使用延迟加载,标准有效,但它的 N+1 问题。如果我使用 Eager load(join 和 addSelect) - 标准不起作用。如果我使用此代码:$articles = $em->createQueryBuilder() ->from(Article::class,'article') ->leftJoin('article.comments','comments') ->addSelect('article') ->addSelect('comments') ->andWhere('comments.approved= :ap ') ->setParameter('ap',true) ->getQuery()->getResult();我会收到评论被批准的文章,但是如果文章有0评论,它不会落入文章集合。如何获取评论已获批准的文章,但如果文章中没有评论,则该文章仍在收藏中?示例:我在数据库中:Article1: [approvedComment, nonAprovedComment]Article2: [nonAprovedComment]Article3: [approvedComment]我需要结果(使用教义,代码中没有过滤器):Article1: [approvedComment]Article2: []Article3: [approvedComment]
1 回答
呼啦一阵风
TA贡献1802条经验 获得超6个赞
您可以使用 ajoin而不是where条件在数据库级别过滤您的集合。
您的查询将如下所示:
$articles = $em->createQueryBuilder()
->from(Article::class, 'article')
->leftJoin('article.comments', 'comments', 'WITH', 'comments.approved = :ap')
->addSelect('article')
->addSelect('comments')
->setParameter('ap', true)
->getQuery()->getResult();由于这是一个左连接,它将返回所有文章,即使它们没有任何已批准的评论。
- 1 回答
- 0 关注
- 180 浏览
添加回答
举报
0/150
提交
取消
