我正在开发一个cakephp项目,并且是Cakephp的新手。正如标题中所提到的,我需要对mysql查询的结果集进行分页,以便在视图中显示它们。
通过这种方式,我可以对" Asin"的结果进行分页。模型。
$this->paginate =array('Asin'=>array(
'fields' => array('sku','fnsku'),
'conditions' => $marketplace,
'page' => 1, 'limit' => 20,
'order' => array('Asin.asin' => 'asc')
)
$data = $this->paginate('Asin',$criteria);
我还需要一种方法来对以下查询的结果集进行分页。
$resultset = $this->Asin->query("SELECT * FROM products INNER JOIN asins ON products.id=asins.id ORDER BY products.id");
如何添加分页?
答案 0 :(得分:4)
CakePHP使用两种方法来管理分页查询,即paginate和paginateCount,它们分别用于获取页面数据和总记录数。要使分页与您的自定义查询一起使用,我们需要在我们的模型文件中实现上述功能,您希望分页处理自定义查询。
public function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) {
$recursive = -1;
// Mandatory to have
$this->useTable = false;
$sql = '';
$sql .= "Your custom query here just do not include limit portion";
// Adding LIMIT Clause
$sql .= (($page - 1) * $limit) . ', ' . $limit;
$results = $this->query($sql);
return $results;
}
...
public function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
$sql = '';
$sql .= "Your custom query here just do not include limit portion";
$this->recursive = $recursive;
$results = $this->query($sql);
return count($results);
}
最后是控制器动作
// Do not forgot to set this, not sure why
$this->Asin->recursive = 0;
// Setting up paging parameters
$this->paginate = array('Asin'=>array('limit'=>5));
// Getting paginated result based on page #
$this->set('userData', $this->paginate('Asin'));
答案 1 :(得分:0)
如果您使用任何关联关系船模型,那么它非常简单http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html