如何使用 Codeigniter 的活动记录将结果集转换为对象数组?

How to convert a result set to an array of objects with Codeigniter's Active Record?

这是我的控制器:

public function index()
{
    $data['page_title'] = 'Home';
    $data['new_grievances'] = $this->admin_home->get_members();
    $data['num_row'] = count($data['new_grievances'] );
    print_r($data['new_grievances']);
    print_r($data['num_row']);
    $this->load->view('admin/grievances_admin_home' , $data);
}

这是我的模型:

function get_members() {
    // $query = $this->db->get('enquiry');
    // return $query;
    $this->db->from('enquiry a');
    $this->db->join('enquiry_department b', 'a.department=b.id' , 'inner');
    $this->db->join('enquiry_user_type c', 'a.user_type=c.id' , 'inner');
    $this->db->WHERE('a.status IS NULL');
    $query = $this->db->get(); 
    return $query;
}

我想获取行数和行数。

在这里,我执行查询 $data['new_grievances'] 行数为 0,因此 $data[[=33 的输出=]] 必须 return 零。

当我得到至少一行的结果时,我会打印 $data['new_grievances'] 它给出的值:

CI_DB_mysqli_result Object (
    [conn_id] => mysqli Object (
        [affected_rows] => 0
        [client_info] => mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $ 
        [client_version] => 50011
        [connect_errno] => 0
        [connect_error] =>
        [errno] => 0
        [error] =>
        [error_list] => Array ( )
        [field_count] => 12
        [host_info]
        ...

如何获取结果集中的行?

请按以下行操作。

public function index()
{
    $data['page_title'] = 'Home';
    $new_grievances = $this->admin_home->get_members();
    $data['num_row'] = $new_grievances->num_rows();
    print_r($new_grievances->result());
    $data['new_grievances'] = $new_grievances->result()
    print_r($data['num_row']);
    $this->load->view('admin/grievances_admin_home' , $data);
}

通过此将代码从 return $query; 更改为 return $query->result(); 您还可以在视图中使用 $data 并计算控制器中的总结果。

这是控制器

public function index()
{
    $data['page_title'] = 'Home';
    $data['new_grievances'] = $this->admin_home->get_members();
    $data['num_row'] = count($data['new_grievances'] );
    print_r($data['new_grievances']);
    print_r($data['num_row']);
    $this->load->view('admin/grievances_admin_home' , $data);
}

这是我的模型

function get_members() {
    $this->db->from('enquiry a');
    $this->db->join('enquiry_department b', 'a.department=b.id' , 'inner');
    $this->db->join('enquiry_user_type c', 'a.user_type=c.id' , 'inner');
    $this->db->WHERE('a.status IS NULL');
    $query = $this->db->get(); 
    return $query->result();
}

只需使用以下行即可从数据库中获取结果

$query = $this->db->get(); $results = $query->result();

并使用以下代码获取找到的行数 $count = $query->num_rows();

public function index()
{
    $data['page_title'] = 'Home';
    $data['new_grievances'] = $this->admin_home->get_members();
    /*Old Code
    $data['num_row'] = count($data['new_grievances'] );*/
    //New Code
    $data['num_row'] = $data['new_grievances'];
    print_r($data['new_grievances']);
    print_r($data['num_row']);
    $this->load->view('admin/grievances_admin_home' , $data);
}

型号

function get_members() {
    $this->db->from('enquiry a');
    $this->db->join('enquiry_department b', 'a.department=b.id' , 'inner');
    $this->db->join('enquiry_user_type c', 'a.user_type=c.id' , 'inner');
    $this->db->WHERE('a.status IS NULL');
    return $this->db->count_all_results();
}

正如我在 中所说,只要您仅 使用 MVC 结构的一层中的行数,声明就没有真正的好处计数变量。

  • 如果您只打算在您的视图中使用该值,则只在您的视图中调用 count()
  • 如果您只打算在您的控制器中使用该值,则只需在您的控制器中调用 count()
  • 如果您需要控制器和视图中的行数,则写D.R.Y。编码并将行计数缓存为控制器中的变量,然后将其传递给视图。

最后,我建议您不要使用可通过 O(1) 函数调用立即访问的数据来膨胀变量范围。