控制器中的代码点火器行数


Codeigniter number of rows in controller

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

<?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();

在我的情况下,我该如何定义它?

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

所以,例如,

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

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

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

你从模型中返回一个数组,所以在控制器中你可以使用 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;
}

为了帮助您:

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

返回 0 并在视图中创建 if else 语句

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