CodeIgniter:如何使用以前的活动记录两次使用get()活动记录?

时间:2013-04-05 09:14:45

标签: codeigniter activerecord get

我在模型下面有以下功能..

    public function get_products($category, $brand, $filter, $page, $limit) {
    // output
    $output = "";
    // offset
    $offset = $limit * ($page - 1);
    // query for pagination
    $this->db->select("*");
    $this->db->from("products");
    $this->db->where("category", $category);
    if ($brand != "all") {
        $this->db->where("brand", $brand);
    }
    // first time use
    $query = $this->db->get();
    $total_rows = $query->num_rows();
    $this->db->limit($limit, $offset);
    switch ($filter) {
        case 'latest':
        $this->db->order_by("released", "ASC");
        break;
        case 'most-viewed':
        $this->db->order_by("views", "ASC");
        break;
        case 'price-low-to-high':
        $this->db->order_by("price", "DESC");
        break;
        case 'price-high-to-low':
        $this->db->order_by("price", "ASC");
        break;
    }
    //second time use
    $query = $this->db->get();

在这里,我想使用selectfromwhere与2 this->db->get(),但查询在运行第一个get()后结束。有没有办法做到这一点?或者我要两次写活动记录?

我尝试这样做的原因是在限制分页num_rows配置之前获取total_rows

1 个答案:

答案 0 :(得分:1)

以下是如何做到这一点。

public function get_products($category, $brand, $filter, $page, $limit) 
{
    $output = "";
    $offset = $limit * ($page - 1);

    $this->getQuery($category , $brand);
    $query = $this->db->get();

    $total_rows = $query->num_rows();
    //Call the query again 
    $this->getQuery($category , $brand);
    /*  This time limit and order will be applied to the query */   
    $this->db->limit($limit, $offset);

    switch ($filter) {
        case 'latest':
        $this->db->order_by("released", "ASC");
        break;
        case 'most-viewed':
        $this->db->order_by("views", "ASC");
        break;
        case 'price-low-to-high':
        $this->db->order_by("price", "DESC");
        break;
        case 'price-high-to-low':
        $this->db->order_by("price", "ASC");
        break;
    }
    //Run query now
    $query2 = $this->db->get();
}
/* This will only generate the query and will not run it */
function getQuery($category , $brand){

    $this->db->select("*");
    $this->db->from("products");
    $this->db->where("category", $category);
    if ($brand != "all") {
        $this->db->where("brand", $brand);
    }
}