手册 >> 数据操作 >> findSql分页

findSql分页

前面已经介绍了spPager的用法和模板中分页的显示,本文将对spPager作进一步的说明。

1. 使用范围——findAll/findSql

使用findAll分页

$guestbook->spPager($this->spArgs('page', 1), 5)->findAll();

使用findSql分页,使用SQL语句的时候分页。

$guestbook->spPager($this->spArgs('page', 1), 5)->findSql('select test_guestbook.* from test_guestbook');

2. 使用SQL的限制

当使用findSql来进行查找分页的时候,请注意以下两点:

  1. SQL语句最外围不能使用limit语句,因为spPager会自动加入limit计算。
  2. SQL语句获取的字段中,务必加入“表名.”进行区分,同时务必加入主键,这点主要SQL语句涉及到多表关联或子查询的时候需要注意。

3. 扩大使用范围

spPager仅支持findAll和findSql两个函数进行分页,如果需要对开发者写作的自定义model函数进行分页,建议在参数中加入页码等。

假设我们guestbook的model类有个叫findme的函数:

<?php
class guestbook extends spModel
{
	public $pk = "id"; // 每个留言唯一的标志,可以称为主键
	public $table = "guestbook"; // 数据表的名称
  
	public $pagedata = null; // 定义成员变量来获取分页数据
	public function findme($condition, $page = 1, $pageSize = 10)
	{
		$result = $this->spPager($page, $pageSize)->findAll($condition); // 使用spPager
		$this->pagedata = $this->spPager()->getPager(); // 对成员变量赋值
		return $result;
	}  
}
?>

在控制器中:

		$guestbook = spClass("guestbook"); 
		$this->results = $guestbook->findme(array('name'=>'jake'), $this->spArgs('page', 1), 10 ); // 当前页是通过spArgs来输入
		$this->pager = $guestbook->pagedata; // 获取guestbook的成员变量值,也就是分页数据
		dump($this->pager);