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

学说2,与条件的关联映射

学说2,与条件的关联映射

PHP
跃然一笑 2022-08-19 10:06:46
我有一个类似的问题和数据库结构:原则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();

由于这是左联接,因此它将返回所有文章,即使它们没有任何批准的注释。


查看完整回答
反对 回复 2022-08-19
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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