0

このロジックを作成しようとしていますが、目標に到達できません。

私はフィードのリストを持っています.それは時々非常に大きく、ほぼ2000のエントリです.

今、私は最初の 40 エントリを提供する Read 関数を作成したいと思います。それらを読んだとき、または最後まで完全にスクロールしたとき、次の 40 エントリをリストの最後に追加する必要があります。

私の現在のスタッフ:

ページとページサイズでページングを作成しましたが、問題は次のとおりです。合計 20 のエントリがあり、エントリの要求を開始するとします。

ページ1 5アイテムリストのアイテム0〜5(arが読み取られた場合、それらはもうリストにありません!)ページ2をロードしません=>アイテム5-0 aso ..それ自体が交差し、アイテムはありません戻る!

どうすればこれを修正できるか考えている人はいますか??

ありがとう

4

1 に答える 1

0

Paginator クラスを使用する必要があります。私のリポジトリクラスの1つに実際の例があります:

<?php

namespace Fluency\Bundle\GeneralBundle\Entity\Repository;

use Doctrine\ORM\EntityRepository,
    Doctrine\ORM\Tools\Pagination\Paginator;
use Fluency\Bundle\GeneralBundle\Entity\Country;

/**
 * CountryRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class CountryRepository extends EntityRepository
{
    /**
     * @param array $criteria
     * @param null $limit
     * @param null $start
     * @return array with this format (0 => $result, 1 => $counter)
     */
    public function findAllByCriteria($criteria = array(), $limit = null, $start = null)
    {
        $query = $this->getEntityManager()->createQueryBuilder()
            ->select('c')
            ->from($this->getEntityName(), 'c')
            ->orderBy('c.name', 'ASC');

        if(null !== $limit)
        {
            $query->setMaxResults($limit);
        }

        if(null !== $start)
        {
            $query->setFirstResult($start);
        }

        if(!empty($criteria))
        {
            if($criteria['active'])
            {
                $query->andWhere($query->expr()->eq('c.active', $criteria['active']));
            }
        }

        $paginator = new Paginator($query);

        return array($query->getQuery()->getArrayResult(), $paginator->count());
    }
    .................
}
于 2013-11-08T17:59:03.227 に答える