为了账号安全,请及时绑定邮箱和手机立即绑定

原则 2,与条件的关联映射

原则 2,与条件的关联映射

PHP
心有法竹 2022-07-29 16:39:33
我有类似的问题和数据库结构:带有条件的 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();

由于这是一个左连接,它将返回所有文章,即使它们没有任何已批准的评论。


查看完整回答
反对 回复 2022-07-29
  • 1 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号