Я работаю над проектом. Сущность — это блог, категория, теги. Блог и теги находятся в отношениях ManyToMany. Мой запрос к репозиторию для получения данных по фильтру тегов.
КОД1:
/**
* @return BlogPost[]
*/
public function getAllActivePostsByTags($value, $order = "DESC", $currentPage = 1, $limit = 10)
{
$query = $this->createQueryBuilder('p')
// ->select('p','t')
->innerJoin('p.blogTags', 't')
->where('t.slug = :val')
->setParameter('val', $value)
->orderBy('p.id', $order)
->getQuery();
$paginator = $this->paginate($query, $currentPage, $limit);
return $paginator;
}
Этот код работает нормально. Все теги (количество тегов в посте) отображаются правильно. Но No of DB Query равно 14. Затем, когда я раскомментирую select как это,
КОД2:
/**
* @return BlogPost[]
*/
public function getAllActivePostsByTags($value, $order = "DESC", $currentPage = 1, $limit = 10)
{
$query = $this->createQueryBuilder('p')
->select('p','t')
->innerJoin('p.blogTags', 't')
->where('t.slug = :val')
->setParameter('val', $value)
->orderBy('p.id', $order)
->getQuery();
$paginator = $this->paginate($query, $currentPage, $limit);
return $paginator;
}
Количество запросов – 9. Но количество тегов в публикации – только одно (все теги одного сообщения не отображаются).
Для ясности:
- Он отображает весь список BlogPost.
- Но не все теги поста.
- Отображается только один тег на сообщение.
Вопрос. Верен ли code1 (количество запросов к БД = 14) или мне нужно немного подправить, чтобы уменьшить количество попаданий в БД. Пожалуйста, помогите мне в этом.