Не знаю насколько это правильно или красиво, решил вопрос так:
class PostRepository extends ServiceEntityRepository
{
public function findAllActiveByTag(string $slug)
{
$ids = $this->createQueryBuilder('p')
->select('p.id')
->leftJoin('p.tags', 't')
->where('t.slug = :slug')
->setParameter('slug', $slug)
->getQuery()
->getSingleColumnResult();
if ($ids) {
return $this->createQueryBuilder('p')
->leftJoin('p.category', 'c')->addSelect('c')
->leftJoin('p.tags', 't')->addSelect('t')
->leftJoin('p.user', 'u')->addSelect('u')
->where((new Expr())->in('p.id', $ids))
->andWhere('p.isActive = true')
->andWhere('c.isActive = true')
->orderBy('p.createdAt', 'DESC')
->getQuery()
->getResult();
} else {
return [];
}
}
}