在Codeigniter中使用Datamapper运行两个查询

时间:2015-01-27 11:15:06

标签: php codeigniter datamapper

我想要执行两个查询,一个用于获取所有结果的计数,另一个用于获得9到9的实际结果。我的问题是当我尝试获取结果的计数时:第二个查询获得所有结果没有WHERE子句的数据库中的行。

$courses = $this->load->model("course")->where("deleted",0);
$courses->where("country",strtolower($country));
$courses->count(); // returns 15
$courses->offset(($per_page)*9)->limit(9);
$courses->get(); // returns 9 rows from all database (like select * from courses limit 9) without where country=france

我的问题是我想要计算所有结果,但我想为分页目的只获得9个结果

新手codeigniter用户需要的帮助

class Course extends DataMapper {

    var $table = 'course';

    var $error_prefix = '<li>';

    var $error_suffix = '</li>';

    function __construct($id = NULL) {
        parent::__construct($id);
    }

}

1 个答案:

答案 0 :(得分:1)

据我所知,您必须对数据库执行两次查询:

  • 一个用于计算。
  • 一个用于检索您想要的结果。

您的问题是您认为有效记录会保留您的结果。当您执行count时,Datamapper会返回查询结果,并为新查询做好准备,因此,它不会保留where子句。

尝试分两步完成。计算:

$courses = $this->load->model("course")->where("deleted",0);
$courses->where("country",strtolower($country));
$counting = $courses->count(); // returns 15

检索结果:

$courses = $this->load->model("course")->where("deleted",0);
$courses->where("country",strtolower($country));
$courses->offset(($per_page)*9)->limit(9);
$results = $courses->get(); // returns 9 rows from all database (like select * from courses limit 9) without where country=france