如何根据 Doctrine 中的 Repository / Criteria 进行查询?

How to get query based on Repository / Criteria in Doctrine?

我如何在 Doctrine 中获得基于 Criteria 的查询?

我设置了以下学说标准:

$criteria = Criteria::create();
$criteria->where(Criteria::expr()->eq("versionFinale", true))
    ->andWhere(Criteria::expr()->eq("versionSoftDeleted", false))
    ->andWhere(Criteria::expr()->eq("versionStatus", "PUBLISHED"));

通常我会使用以下代码来获取结果:

$repo->matching($criteria)

但是,因为我想使用 KNP Paginator,所以我需要一个查询。

我可以使用:

$this->createQueryBuilder('a')
     ->addCriteria($criteria);

然而,这将需要我在查询构建器中提供 repo,这不是很优雅和高效。

我如何获得基于存储库和条件的查询?

创建某种 PaginatorQueryService 有什么不优雅的地方?简单地实现这样的东西(未测试)

class PaginatorQueryService
{
    private $em;

    function __construct(EntityManagerInterface $em)
    {
        $this->em = $em;
    }

    public function getPaginatorQuery($repository, $criteria)
    {
       return $this->em->createQueryBuilder()->select('entity')->from($repository, 'entity')->addCriteria($criteria)->getQuery();
    }
}