过去几天我一直在玩doctrine2 + ZF设置。
我仍然无法弄清楚的一件事是大型集合收集问题。例如,假设我们有一个名为Post的实体,每个帖子都可以有很多注释。
<?php
/**
* @Entity
*/
class Post
{
/**
* @OneToMany(targetEntity="Comment", mappedBy="post")
*/
protected $comments;
}
?>
现在这将加载所有评论,如果我
$post->comments
但是,如果有,请说这篇特别帖子有10000条评论?然后所有将被加载,这是不好的。据我所知,切片/分页在学说2.1之前不可用。
有人可以建议我如何分页评论吗?有DQL可能吗?如果是DQL,你在哪里实现这个?我在Post实体中创建一个getComments方法并在那里进行DQL吗?
由于 比尔
答案 0 :(得分:10)
我正在使用来自https://github.com/beberlei/DoctrineExtensions的分页,它很有效,至少对我而言。
修改:不确定这会对您有所帮助,但这就是我的分页方式
<强>控制器强>
// Create the query
$qb = $this->_em->createQueryBuilder();
$qb->select('p')
->from('Identiti_Entities_Pengguna', 'p');
// Sorting
$qb->addOrderBy('p.' . $input->sort, $input->dir);
$q = $qb->getQuery();
// Pagination
$itemPerPage = 100;
$records = new Zend_Paginator(
new DoctrineExtensions\Paginate\PaginationAdapter($q));
$records->setCurrentPageNumber($input->page)
->setItemCountPerPage($itemPerPage)
->setPageRange(10);
$this->view->records = $records;
查看强>
<?
echo $this->paginationControl($this->records,
'Sliding',
'partials/pagination.phtml');
?>
<强> pagination.html 强>
<?php if ($this->pageCount): ?>
<ul id="pagination-digg">
<li class="previous"><a href="#">Pages: <?=$this->pageCount?></a></li>
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
<li class="previous"><a href="<?php echo $this->url(array('page' => $this->previous)); ?>">
< Previous
</a></li>
<?php else: ?>
<li class="previous-off">< Previous</li>
<?php endif; ?>
<!-- Numbered page links -->
<?php foreach ($this->pagesInRange as $page): ?>
<?php if ($page != $this->current): ?>
<li>
<a href="<?php echo $this->url(array('page' => $page)); ?>">
<?php echo $page; ?>
</a>
</li>
<?php else: ?>
<li class="active"><?php echo $page; ?></li>
<?php endif; ?>
<?php endforeach; ?>
<!-- Next page link -->
<?php if (isset($this->next)): ?>
<li class="next">
<a href="<?php echo $this->url(array('page' => $this->next)); ?>">
Next >
</a>
</li>
<?php else: ?>
<li class="next-off">Next ></li>
<?php endif; ?>
</ul>
<?php endif; ?>
答案 1 :(得分:1)
您可以考虑实施Zend_Paginator_Adapter_Interface
。
有关详细信息,请参阅ZF文档:
答案 2 :(得分:0)
Doctrine 2.2现在有一个Paginator类。有关如何将其与Zend_Framework一起使用,请参阅此链接: Reply to How to use D2's Paginator with Zend_Paginator