При использовании Kohana DB, как избежать дублирования кода при подсчете нумерации страниц? - PullRequest
1 голос
/ 08 июля 2011

Используя конструктор запросов Kohana, возможно ли построить мой запрос по частям.

Затем выполнить подсчет указанного запроса.

Затем выполните сам запрос.

Все без необходимости писать дубликаты условий ... один для подсчета и один для результатов ...

Добавление

DB::select(array('COUNT("pid")', 'mycount'))

К основному запросу возвращается только одна запись.

Возможно ли выполнить счет и каким-то образом удалить

array('COUNT("pid")', 'mycount')

из выбранных ...

В настоящий момент я могу думать только о том, чтобы найти и заменить сам код SQL, а затем просто запустить указанный код SQL ... хотя должен быть лучший способ ... Я надеюсь ...

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Для этого я использую 3 метода. Первый возвращает результаты, разбитые на страницы, второй - счетчик. В-третьих, приватный метод содержит общие условия, используемые # 1 и # 2. Если в запросе нужно использовать JOIN, WHERE или что-то в этом роде, все идет к # 3. Таким образом, нет необходимости повторять запрос.

/* 1 */
public function get_stuff($pagination = false){
    $query = DB::select(/* ... columns here ... */);
    $query = $this->get_stuff_query($query);
    if($pagination) $query->limit($pagination->items_per_page)->offset($pagination->offset);
    return $query->execute();
}

/* 2 */
public function get_stuff_count(){
    $query = DB::select(array('COUNT("id")', 'total_rows'));
    $query = $this->get_stuff_query($query);
    $result = $query->execute();
    return $result->get('total_rows',0);
}

/* 3 */
private function get_stuff_query($query){
    $query->from(/* tablename */);
    $query->join(/* ... */);
    $query->where(/* ... */);
    return $query;
}
2 голосов
/ 08 июля 2011

Использование count_last_query ()

// $db is a Database instance object
$count = $db->count_last_query();
...