使用Kohana DB时,如何在需要分页计数时避免重复代码?

时间:2011-07-07 22:13:17

标签: php kohana kohana-3 kohana-db

使用Kohana查询构建器,是否可以逐个构建我的查询。

然后对所述查询执行计数。

然后执行查询本身。

所有这些都不需要写重复的条件...一个用于计数,一个用于结果...

添加

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

主要查询结果只返回一条记录。

是否可以执行计数,并以某种方式删除

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

来自选择...

现在我能想到的唯一方法就是找到并替换SQL代码本身,然后只运行代码SQL ......虽然必须有更好的方法......我希望...

谢谢!

2 个答案:

答案 0 :(得分:2)

使用count_last_query()

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

答案 1 :(得分:2)

要做到这一点,我使用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;
}