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