我有一个模型,我从数据库中选择适当的数据,如下所示:
<?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();
我如何在我的案例中定义它?
答案 0 :(得分:3)
所以,例如,
$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
}