У меня похожая проблема и структура БД:
Отображение ассоциации 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]
Мне нужен результат (с doctrine, без фильтра в коде):
Article1: [approvedComment]
Article2: []
Article3: [approvedComment]