Kohana 3.1 Количество запросов и разбиение на страницы - PullRequest
2 голосов
/ 30 марта 2011

Я мокну ногами от Коханы, но у меня проблемы с нумерацией страниц.я получаю следующую ошибку:

ErrorException [Неустранимая ошибка]: класс 'Пагинация' не найден

после неофициальной вики я исправил файл начальной загрузки, добавив следующее:

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 ]

4 голосов
/ 30 марта 2011

Kohana 3.1 не поставляется с модулем пагинации ... он должен быть загружен с

https://github.com/kohana/pagination

затем перейдите в строку 199 редактирования класса / кохана от -> uri до -> uri ()

что делает

относительно количества запросов .... все еще в поиске.

надеюсь, это кому-нибудь поможет

1 голос
/ 06 июля 2011

Раньше в классе 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;
}
...