【问题标题】:Pagination using Doctrine and ZF2使用 Doctrine 和 ZF2 进行分页
【发布时间】:2013-02-25 13:50:00
【问题描述】:

我正在尝试使用 ZF2 和 Doctrine 实现分页。

我在这里要做的是从关联的表中获取数据,比如说“xyz”。

我的类别表在其自己的 PK 上进行一对多自引用。 我的类别表有以下字段

  • ID (PK)
  • Created_at
  • Category_id(自引用 PK)

我的 XYZ 表可以说它被称为 Name table has

  • ID (PK)
  • Category_id(FK)
  • 姓名
  • 详情

这就是我试图获取数据的方法

      public function allSubcategories($id, $column, $order) {
 $repository = $this->entityManager->getRepository('Category\Entity\Category');
    $queryBuilder = $repository->createQueryBuilder('category');
    $queryBuilder->distinct();
    $queryBuilder->select('category');

    $queryBuilder->join('Category\Entity\CategoryName', 'category_name', 'WITH', 'category.id = category_name.category');
    $queryBuilder->orderBy("category.status");
    $q = $queryBuilder->getDql();
    return $query = $this->entityManager->createQuery($q);
}

在我的控制器中,这就是我正在做的事情

      public function subcategoryAction() {

    ///////////////////////////InPut Params Given for the pagination
    $category_id = (int) $this->params()->fromRoute('id', 0);
    $page = (int) $this->params()->fromRoute('page', 0);
    $column = $this->params()->fromQuery('column');
    $order = $this->params()->fromQuery('order');



    $categoryModel = $this->getServiceLocator()->get('Category');
    $categoryModel->category = $category_id;


    $perPage = 10;
    $request = $this->getRequest();
    if ($request->isGet()) {
        $view = new ViewModel();
        $query = $categoryModel->allSubcategories($category_id, $column, $order);

        $paginator = new ORMPaginator($query);

        $paginator = new \Zend\Paginator\Paginator(new
                        \Zend\Paginator\Adapter\ArrayAdapter(array($paginator)));
        $paginator->setCurrentPageNumber($page);
        $paginator->setItemCountPerPage(2);

    }

    return array('id' => $category_id, 'view' => $paginator);
}

现在我没有得到实现分页的结果,有人可以指导我了解我所缺少的吗?

【问题讨论】:

    标签: php doctrine-orm zend-framework2


    【解决方案1】:

    您在那里使用了错误的分页器。相反,您可以使用DoctrineORMModule(请参阅DoctrineORMModule\Paginator\Adapter\DoctrinePaginator)。

    可能不是很明显,但逻辑和你已经写的差不多:

    use DoctrineORMModule\Paginator\Adapter\DoctrinePaginator as PaginatorAdapter;
    use Doctrine\ORM\Tools\Pagination\Paginator as ORMPaginator;
    use Zend\Paginator\Paginator as ZendPaginator;
    
    $query = $categoryModel->allSubcategories($category_id, $column, $order);
    
    $paginator = new ZendPaginator(new PaginatorAdapter(new ORMPaginator($query)));
    

    【讨论】:

    • 我刚刚修改为 $adapter = new DoctrineAdapter(new ORMPaginator($categoryModel->allSubcategories($category_id, $column, $order), true)); $paginator = new Paginator($adapter);
    • and public function allSubcategories($id, $column, $order) { $repository = $this->entityManager->getRepository('Category\Entity\Category'); $queryBuilder = $repository->createQueryBuilder('category'); $queryBuilder->select('category'); $queryBuilder->join('Category\Entity\CategoryName', 'category_name', 'WITH', 'category.id = category_name.category'); $queryBuilder->orderBy("category.status"); $q = $queryBuilder->getDql(); $query = $this->entityManager->createQuery($q); $results = $query->getResult();返回$结果; }
    • 现在我收到此错误参数 1 传递给 Doctrine\\ORM\\Tools\\Pagination\\Paginator::cloneQuery() must be an instance of Doctrine\\ORM\\Query, array鉴于如何克服这一点
    • @noobie-php 将查询传递给ORMPaginator,而不是查询的结果。
    • @noobie-php 分页器不支持您粘贴的查询。您必须$query->getResults(),然后使用数组适配器进行分页。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 2014-05-13
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多