Kohana 3.1查询计数&分页

时间:2011-03-30 14:56:40

标签: pagination kohana

我正在和Kohana擦肩而过,但是遇到了分页问题。我收到以下错误:

  

ErrorException [致命错误]:类   找不到'分页'

在非官方维基之后我修改了bootstrap文件以包含这个:

Kohana::modules(array( 'database' => MODPATH.'database', 'userguide' => MODPATH.'userguide', 'pagination' => MODPATH.'pagination', ))

但这似乎没有帮助。

我的第二个问题是关于查询计数....我很惊讶没有像$ query-count()的函数,除非我选择ORM而不是我发现这个解决方案有点笨重,因为查询计数是一个必须为每个分页请求:

$result['count'] = $pagination_query->select('COUNT("*") AS result_count')->execute()->get('result_count');

有什么建议吗?

非常感谢

2 个答案:

答案 0 :(得分:4)

Kohana 3.1不附带分页模块...... 必须从

下载

https://github.com/kohana/pagination

然后从 - > uri转到 - / kohana编辑行199 - > uri()

这样做

关于查询计数....仍在搜索。

希望这有助于某人

答案 1 :(得分:1)

在Database类中曾经有一个count_last_query()函数,它提供了上次查询运行的总结果,因为它没有任何限制或偏移量,但是它们从版本3.0.9中提取。你可以在这里找到它的文档:

http://kohanaframework.org/3.0/guide/api/Database#count_last_query

如果你想使用它,我实际上已经建立了该函数的代码来创建我自己的计数查询函数。

protected static function _pagedQuery($query) {
  $sql = (string)$query;
  if (stripos($sql, 'LIMIT') !== FALSE) {
    // Remove LIMIT from the SQL
    $sql = preg_replace('/\sLIMIT\s+[^a-z]+/i', ' ', $sql);
  }
  if (stripos($sql, 'OFFSET') !== FALSE) {
    // Remove OFFSET from the SQL
    $sql = preg_replace('/\sOFFSET\s+\d+/i', '', $sql);
  }
  if (stripos($sql, 'ORDER BY') !== FALSE) {
    // Remove ORDER BY from the SQL
    $sql = preg_replace('/\sORDER BY\s+`\w+`(\.`\w+`)?(\s+DESC|\s+ASC)?/i', '', $sql);
  }

  $db = Database::instance();
  $result = $db->query(Database::SELECT, '
    SELECT COUNT(*) AS ' . $db->quote_identifier('total_rows') . '
    FROM (' . $sql . ') AS ' . $db->quote_table('counted_results'),
    TRUE
  );
  return (int)$result->current()->total_rows;
}