我有一个类似的问题和数据库结构:原则2 与条件的关联映射但是,我需要具有批准评论的文章集合:如何做没有N + 1的协商映射?$articles = $repository->findAllArticlesWithApprovedComments(); Foreach($articles as $article){ $article->getTitle(); foreach($article->getAprovedComments() as $comment){ $comment->getText(); } }标准有效,如果我使用延迟加载,但它的N + 1问题。如果我使用预先加载(加入并添加选择) - 条件不起作用。如果我使用此代码:$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条评论,它将不会落入文章集合。如何获取具有已批准评论的文章,但如果文章中没有评论,则文章仍保留在集合中?示例:我在 DB 中有:Article1: [approvedComment, nonAprovedComment]Article2: [nonAprovedComment]Article3: [approvedComment]我需要结果(带有原则,代码中的非过滤器):Article1: [approvedComment]Article2: []Article3: [approvedComment]
1 回答
万千封印
TA贡献1891条经验 获得超3个赞
可以使用条件而不是条件在数据库级别筛选集合。joinwhere
然后,您的查询将如下所示:
$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 关注
- 96 浏览
添加回答
举报
0/150
提交
取消
