只有最后一行在Codeigniter中显示在视图中

时间:2015-08-13 17:36:53

标签: php codeigniter

我试图从中获取某些值,然后将其传递给同一控件中的另一个模型。

但是我只能在视图中显示最后一行。

我在下面分享了我的代码,我不确定我哪里出错了。

控制器:

public function test($id){
$mapping_details = $this->queue_model->get_mapping_details($id);

foreach ($mapping_details as $value) {
        $data['agent_details'] = array($this->agent_model->get_agent_details($value['user_id']));
    }

  $this->load->view('app/admin_console/agent_queue_mapping_view', $data);
}

型号:

public function get_agent_details($id) {

    $query = "select * from user_table where id = ".$id." and company_id = ".$this->session->userdata('user_comp_id');

    $res = $this->db->query($query);                       
    return $res->result_array();
}

1 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow。问题是控制器中的迭代。您正在遍历$mapping_details结果,并且每次迭代都会将值重新分配给$data['agent_details'],从而丢失最后存储的信息。你需要做的是推送到一个数组,如下所示:

foreach ($mapping_details as $value) {
    $data['agent_details'][] = $this->agent_model->get_agent_details($value['user_id']);
}

但是,如果您创建了一个使用JOIN从数据库中获取相关信息的查询,那不是最好吗?这将是一种更有效的创建查询的方法,并且会阻止您反复迭代和调用get_agent_details()。想想速度。为此,您需要创建一个类似于此的模型方法(这只是一个示例):

public function get_mapping_details_with_users($id){
    $this->db->select('*');
    $this->db->from('mapping_details_table as m');
    $this->db->join('user_table as u', 'u.id=m.user_id');
    $this->db->where('m.id', $id);
    $this->db->where('u.company_id', $this->session->userdata('user_comp_id'));
    return $this->db->get()->result();
}

然后您的控制器只需要获取该模型结果并将其发送到视图:

public function test($id){
    $data['details_w_users'] = $this->queue_model->get_mapping_details_with_users($id);
    $this->load->view('app/admin_console/agent_queue_mapping_view', $data);
}

希望这会有所帮助。 :)