findAll是 FLEA_Db_TableDataGateway 类的一个方法,其函数类型如下:
/**
* 查询所有符合条件的记录及相关数据,返回一个包含多行记录的二维数组,失败时返回 false
*
* @param mixed $conditions
* @param string $sort
* @param mixed $limit
* @param mixed $fields
* @param mixed $queryLinks
*
* @return array
*/
function & findAll($conditions = null, $sort = null, $limit = null, $fields = '*', $queryLinks = true)
其中第三个参数可以引入数组参数。看该函数中处理$limit参数的代码可得到判 断:
// 处理 $limit
if (is_array($limit)) {
list($length, $offset) = $limit;
} else {
$length = $limit;
$offset = null;
}
再根据其中的一 段代码:
// 根据 $length 和 $offset 参数决定是否使用限定结果集的查询
if (null !== $length || null !== $offset) {
$result = $this->dbo->selectLimit($sql, $length, $offset);
} else {
$result = $this->dbo->execute($sql);
}
追 踪分析selectLimit方法(FLEA_Db_Driver_Mysql数据库底层驱动类),分析该方法的代码段:
if (!is_null($offset)) {
$sql .= " LIMIT " . (int)$offset;
if (!is_null($length)) {
$sql .= ', ' . (int)$length;
} else {
$sql .= ', 4294967294';
}
}
从中可 知,findAll的第三个参数只要传入数组参数array($length, $offset)就可以进行分页,即进行限定结果集的查询。传入的数组参数说明:$length 为每页显示记录数;$offset 为偏移量,计算公式:$offset = ($page - 1) * $length,公式中的 $page 为当前页码,从 1 算起。
大 家分析一下 Flea_Helper_Page 类的代码可知,FleaPHP 的分页助手类其实也是根据此原理来进行分页的。
本人论坛 贴:http://qeephp.com/bbs/thread-7362-1-1.html