Codeigniter控制器中的行数

时间:2012-06-20 21:26:08

标签: php codeigniter

我有一个模型,我从数据库中选择适当的数据,如下所示:

<?php
    class vacancies extends CI_Model{

        function vacancies()
        {
            $query = $this->db->query("SELECT * FROM ecc_vacancies_vac WHERE active_vac = 1 AND end_vac >= CURDATE() ORDER BY date_vac DESC");

            if($query->num_rows() >= 1){
                foreach($query->result() as $row){
                    $data[] = $row;
                }
                return $data;
            }
        }

    }  

和一个控制器,在发送到视图之前处理这些数据,如下所示:

function index()
{
    //check if there any available vacancies

    $this->load->model('vacancies');
    $data['vacancies'] = $this->vacancies->vacancies();
    // then i load the views here 
 }

我需要做的是知道控制器中返回行的总数,以便我可以将数字发送到视图以便以后使用。

使用活动记录时,我曾经使用过这行代码:

$data['num_rows'] = $$data['vacancies']->num_rows();

我如何在我的案例中定义它?

4 个答案:

答案 0 :(得分:3)

PHP救援。由于模型方法返回一个数组,因此您可以获得a simple count() call的总行数。

所以,例如,

$this->load->model('vacancies');
$data['vacancies'] = $this->vacancies->vacancies();
$data['number_of_vacancies'] = count($data['vacancies']);

答案 1 :(得分:2)

您正在从模型返回一个数组,因此在控制器中您可以使用PHP的count()函数:

$data['num_rows'] = count($data['vacancies']);

您的模型也存在问题,如果没有结果,该函数将不会返回数组,如果您稍后将其视为数组,则可能会导致问题。您应该在if语句之前为$ data添加初始化,然后始终返回一个空数组:

function vacancies()
{
    $query = $this->db->query("SELECT * FROM ecc_vacancies_vac WHERE active_vac = 1 AND end_vac >= CURDATE() ORDER BY date_vac DESC");

    $data = array();
    if ($query->num_rows() >= 1){
        foreach ($query->result() as $row){
            $data[] = $row;
        }
    }
    return $data;
}

答案 2 :(得分:2)

num-rows();只有在您的模型中仍处理“查询部分”时才有效。它引用了DB对象。 您已经返回了数据。 试试这个:

 $data['num_rows'] = count($data['vacancies']);

答案 3 :(得分:1)

帮助你:

if($query->num_rows()!==0){
   return $query->result_array();
}else{
   return 0;
}

返回0并在视图中生成if else语句

if($result!=0){
   // No results found
}else{
   // Do something
}