dongshan4316
2011-02-11 13:58
浏览 42
已采纳

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

I'm using CodeIgniter and I'm struggling with arrays, I need to do a mysql db lookup in the controller and then pass an array to the view so I can loop through the array in the view to display a list of results. I need the array to contain two fields per row and ID and Name so eg

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

i've been looking al over the net and I can do this by just passing either ID or Name but i cant figure out how to pass them both in the array.

//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 :(
                                    }

I can understand basic arrays but have never really had to use them before and now im using CI and i cant simply put the sql lookup in the view and loop through it there. I know the sql lookup should be in model but im not fussed about that at the moment, just want to get the array filled out and passed to the view, any help would be appreciated.

//EDIT this below function works fine but is it how yours suppposed to use 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条回答 默认 最新

  • dps57553 2011-02-11 15:21
    已采纳

    If you don't need to do anything with the data in the controller you can just as well pass the $query variable to your view and then foreach ($query->result() as $row) in the view.

    //EDIT: I would write your controller like this. Here I assume you must enter this controller with a ID, if you do not it will raise an error. Your URI segment code would returned false, which I think would be interpreted as zero in your query and return a zero resultset. You could set 0 as a default value like this viewCase($caseID=0) if you like.

        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');
    }
    

    And then in your view do something like this

    // 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>
    

    Note that the foreach will not enter if there are no rows so you don't really need to check for number of rows unless you want to do something special when there is nothing returned (like printing "no result").

    打赏 评论
  • douchendan0040 2011-02-11 14:01
    foreach ($query->result() as $row)
      {
        $cases[]=array ($row->ID,$row->CaseName);
        // or $cases[] = array ('id' => $row->ID, 'name' => $row->CaseName);
      }
    
    打赏 评论
  • dongranding3909 2011-02-14 23:26

    Let me do a simple layout on how your app should run if you are falling the MVC pattern, wich codeigniter is based on.

    Model:

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

    Controller:

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

    View:

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

    This is more or less as short version of what you need to do.

    Hope It helps

    打赏 评论

相关推荐 更多相似问题