我正在尝试创建这个逻辑,但我无法达到任何目标。
我有一个 Feed 列表。有时非常大,几乎有 2000 个条目。
现在我想创建一个读取函数,它给我前 40 个条目,当我读完它们或者我已经完全滚动到底部时,接下来的 40 个条目应该附加在列表的底部。
我现在的员工:
我创建了一个带有页面和页面大小的分页,但问题如下: 假设我们总共有 20 个条目,并且开始请求条目:
第 1 页 5 项列表中的第 0 - 5 项(如果 ar 读取到它们不再在列表中!) 我不是加载第 2 页 => 项目 5-0 等..在某个点它会交叉自身,并且不会返回任何项目!
有人知道我该如何解决这个问题吗?
谢谢
您必须使用 Paginator 类。我的一个存储库类中有一个工作示例:
<?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());
}
.................
}