我有一個(gè)類似的問題和數(shù)據(jù)庫結(jié)構(gòu):原則2 與條件的關(guān)聯(lián)映射但是,我需要具有批準(zhǔn)評(píng)論的文章集合:如何做沒有N + 1的協(xié)商映射?$articles = $repository->findAllArticlesWithApprovedComments(); Foreach($articles as $article){ $article->getTitle(); foreach($article->getAprovedComments() as $comment){ $comment->getText(); } }標(biāo)準(zhǔn)有效,如果我使用延遲加載,但它的N + 1問題。如果我使用預(yù)先加載(加入并添加選擇) - 條件不起作用。如果我使用此代碼:$articles = $em->createQueryBuilder() ->from(Article::class,'article') ->leftJoin('article.comments','comments') ->addSelect('article') ->addSelect('comments') ->andWhere('comments.approved= :ap ') ->setParameter('ap',true) ->getQuery()->getResult();我會(huì)收到有批準(zhǔn)評(píng)論的文章,但如果文章有0條評(píng)論,它將不會(huì)落入文章集合。如何獲取具有已批準(zhǔn)評(píng)論的文章,但如果文章中沒有評(píng)論,則文章仍保留在集合中?示例:我在 DB 中有:Article1: [approvedComment, nonAprovedComment]Article2: [nonAprovedComment]Article3: [approvedComment]我需要結(jié)果(帶有原則,代碼中的非過濾器):Article1: [approvedComment]Article2: []Article3: [approvedComment]
1 回答

萬千封印
TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊
可以使用條件而不是條件在數(shù)據(jù)庫級(jí)別篩選集合。join
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();
由于這是左聯(lián)接,因此它將返回所有文章,即使它們沒有任何批準(zhǔn)的注釋。
- 1 回答
- 0 關(guān)注
- 85 瀏覽
添加回答
舉報(bào)
0/150
提交
取消