4

我有一个模型,我可以从数据库中选择正确的数据,如下所示:

<?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

4 回答 4

3

PHP来救援。由于您的模型方法返回一个数组,因此您可以通过简单的 count() 调用获得总行数。

所以,例如,

$this->load->model('vacancies');
$data['vacancies'] = $this->vacancies->vacancies();
$data['number_of_vacancies'] = count($data['vacancies']);
于 2012-06-20T21:32:26.177 回答
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;
}
于 2012-06-20T21:29:57.080 回答
2

行数();仅当您仍在模型中处理“查询部分”时才有效。它指的是 DB 对象。您已经返回了数据。试试这个:

 $data['num_rows'] = count($data['vacancies']);
于 2012-06-20T21:33:55.330 回答
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
}
于 2016-01-12T19:30:59.370 回答