我有类似的问题和数据库结构:
但是,我需要带有批准评论的文章集合:
如何在没有 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]
呼啦一阵风