如何使用查询构建器

时间:2017-06-26 13:13:40

标签: zend-framework2 query-builder doctrine-query

我有一个带有创建日期时间字段的用户表。我想要做的是解析表并返回每天有多少用户注册:

12/06/2017 | 5  
12/06/2017 | 8  
12/06/2017 | 7  
12/06/2017 | 12

我认为最好使用分页类来优化查询,到目前为止还有:

  public function getUserSignups($days)
    {
        $qb   = $this->userRepository->createQueryBuilder('user')
            ->orderBy('user.created', 'ASC')
            ->getQuery();

        $adapter   = new DoctrineAdapter(new ORMPaginator($qb));
        $paginator = new Paginator($adapter);

        return $paginator->setCurrentPageNumber((int) 1)->setItemCountPerPage((int) $days);
    }

编辑:

这将返回结果,而不对它们进行分组/计数:

    $qb   = $this->userRepository->createQueryBuilder('user')
        ->select('SUBSTRING(user.created, 1, 10) as date')
        ->getQuery();

    return $qb->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

我当然可以解析返回的数组并计算每个项目,但这似乎是一个黑客。

1 个答案:

答案 0 :(得分:0)

我想通了,希望这会帮助其他希望使用QueryBuilder返回一段时间内注册的用户数量的人:

 public function getUserSignups($days)
    {
        $qb   = $this->userRepository->createQueryBuilder('user')
            ->select('SUBSTRING(user.created, 1, 10) as date, COUNT(user.id) as users')
            ->groupBy('date')
            ->orderBy('date','ASC')
            ->setMaxResults($days)
            ->getQuery();

        return $qb->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY);

    }