将具有多个字段的数组传递给codeigniter中的视图

时间:2011-02-11 13:58:50

标签: php mysql arrays codeigniter

我正在使用CodeIgniter,我正在努力使用数组,我需要在控制器中进行mysql数据库查找,然后将数组传递给视图,这样我就可以遍历视图中的数组来显示一个列表结果。我需要数组每行包含两个字段以及ID和Name,例如

row1 ID = 1,Name = Hello row2 ID = 2,Name = World

我一直在寻找网络,我可以通过传递ID或名称来做到这一点,但我无法弄清楚如何在数组中传递它们。

//get open cases
        $this->db->where('UserID',$this->session->userdata('ID'));
                $query = $this->db->get('cases');
                if ($query->num_rows() > 0)
                        {
                            $cases = array();
                            foreach ($query->result() as $row)
                                    {
                                        // ive tried this
                                        $cases[]=$row->ID,$row->CaseName;
                                        // and this
                                        $cases[]=($row->ID,$row->CaseName);
                                        //but they both dont work :(
                                    }

我可以理解基本数组,但之前从未真正使用它们,现在我正在使用CI,我不能简单地将sql查找放在视图中并在那里循环。我知道sql查找应该在模型中,但我现在还没有讨论,只是想填充数组并传递给视图,任何帮助都将不胜感激。

//编辑以下功能可以正常使用,但是你是如何使用CI

function viewCase()
            {
                $caseID = $this->uri->segment(3);

                $this->db->where('ID',$caseID);
                $this->db->where('UserID',  $this->session->userdata('ID'));
                $query = $this->db->get('cases');
                if ($query->num_rows() == 1)
                {
                    foreach ($query->result() as $row)
                            {
                            $data['caseID']= $row->ID;
                            $data['caseName'] = $row->CaseName;
                            $data['fileName'] = $row->FileName;
                            $data['statusID'] = $row->Status;
                            $data['statusName']= "not set yet";
                            //we need the status friendly name
                            $this->db->where('ID', $data['statusID']);
                            $query2 = $this->db->get('case_status');
                            if ($query->num_rows() == 1)
                            {
                                foreach ($query2->result() as $row2)
                                        {
                                            $data['statusName']=$row2->Name;
                                         }
                            }

                            }


                            $data['fName']= $this->session->userdata('fName');
                            $data['lName']= $this->session->userdata('lName');
                            $data['email']= $this->session->userdata('email');
                            $data['fullName']= $this->session->userdata('fName')." ".$this->session->userdata('lName');
                            $this->load->view('head',$data);
                            $this->load->view('header_logged_in',$data);
                            $this->load->view('nav');
                            $this->load->view('view_case_view',$data);
                            $this->load->view('footer');
                            }

                else
                    {
                    $data['fName']= $this->session->userdata('fName');
                    $data['lName']= $this->session->userdata('lName');
                    $data['email']= $this->session->userdata('email');
                    $data['fullName']= $this->session->userdata('fName')." ".$this->session->userdata('lName');
                    $this->load->view('head',$data);
                    $this->load->view('header_logged_in',$data);
                    $this->load->view('nav');
                    $this->load->view('view_case_error_view');
                    $this->load->view('footer');
                    }
            }

3 个答案:

答案 0 :(得分:1)

foreach ($query->result() as $row)
  {
    $cases[]=array ($row->ID,$row->CaseName);
    // or $cases[] = array ('id' => $row->ID, 'name' => $row->CaseName);
  }

答案 1 :(得分:1)

让我对你的app应该如何运行进行一个简单的布局,如果你正在放弃MVC模式,那么codeigniter是基于。

型号:

class YourModel extends Model{
     function get_data(){
         $query = $this->db->get('cases');
         return $query->result();
     }
}

控制器:

class YourController exteds Controller{
     function yourFunction(){
          $this->load->model('Model_name', 'fubar');
          $data['yourinfo'] = $this->fubar->get_data();

          $this->load->view('yourview', $data);
     }
}

查看:

foreach($yourinfo as $row){
         echo $row->yourcoulmn . "<br>";
}

这或多或少是您需要做的简短版本。

希望有所帮助

答案 2 :(得分:0)

如果您不需要对控制器中的数据执行任何操作,您也可以将$query变量传递到视图,然后在视图中传递foreach ($query->result() as $row)

//编辑: 我会这样写你的控制器。这里我假设您必须输入带有ID的控制器,否则会引发错误。您的URI段代码将返回false,我认为在您的查询中将其解释为零并返回零结果集。如果您愿意,可以将0设置为默认值,如viewCase($caseID=0)

    function viewCase($caseID)
{
    $this->db->select('cases.ID AS CaseID', FALSE); /* you will access this as $row->CaseID */
    $this->db->select('cases.CaseName');
    $this->db->select('cases.FileNameName');
    $this->db->select('cases.Status AS StatusID', FALSE); /* if you don't need status id, you can remove this, access as $row->StatusID */
    $this->db->select('case_status.Name AS StatusName', FALSE); /* access as $row->StatusName */
    $this->db->join('case_status', 'case_statis.ID=cases.Status');
    $this->db->where('cases.ID', $caseID);
    $this->db->where('cases.UserID', $this->session->userdata('ID'));
    $query = $this->db->get('cases');

    $data['query'] = $query;

    $data['fName']= $this->session->userdata('fName');
    $data['lName']= $this->session->userdata('lName');
    $data['email']= $this->session->userdata('email');
    $data['fullName']= $this->session->userdata('fName')." ".$this->session->userdata('lName');

    $this->load->view('head',$data);
    $this->load->view('header_logged_in',$data);
    $this->load->view('nav');
    $this->load->view('view_case_view',$data);
    $this->load->view('footer');
}

然后在你看来做这样的事情

// view
<table>
    <tr>
        <th>CaseID</th>
        <th>CaseName</th>
        <th>FileName</th>
        <th>StatusID</th>
        <th>StatusName</th>
    </tr>
    <? foreach ($query->result() as $row): ?>
        <tr>
        <td><p><?=$row->CaseID?></p></td>
        <td><p><?=$row->CaseName?></p></td>
        <td><p><?=$row->FileName?></p></td>
        <td><p><?=$row->StatusID?></p></td>
        <td><p><?=$row->StatusName?></p></td>
        </tr>
    <? endforeach; ?>
</table>

请注意,如果没有行,foreach将不会进入,因此您不需要检查行数,除非您想要在没有返回任何内容时执行特殊操作(例如打印“无结果”)。< / p>