2011-02-11 71 views
0

我正在使用CodeIgniter,我正在努力處理數組,我需要在控制器中執行mysql數據庫查找,然後將數組傳遞給視圖,以便我可以循環查看視圖中的數組以顯示結果列表。我需要的數組包含每行的ID和名稱,以便例如將多個字段的數組傳遞給codeigniter中的視圖

ROW1 ID = 1,名稱=你好 2行ID = 2,名稱=兩場世界

我一直在找人過網我可以通過傳遞ID或Name來做到這一點,但我不知道如何在數組中傳遞它們。

//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查找應該在模型中,但是現在我沒有想到,只想讓數組填充並傳遞給視圖,任何幫助將不勝感激。

//編輯下面這個功能工作正常,但它是你如何suppposed使用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'); 
        } 
      } 

回答

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不會進入,如果沒有行,所以你並不真的需要檢查的行號,除非你在沒有任何返回時(如打印「無結果」),要做特別的事情。

+0

酷沒有意識到你可以通過除$數據以外的任何東西給他們,你能幫我一個忙嗎編輯我的帖子來顯示我的功能出我的控制器之一,它工作正常,但我想知道如果即時通訊做的事情正確就像在CI「道德規範」中一樣,禁止不使用模式。 – stedotmartin 2011-02-11 15:54:25

+0

嗨,多數民衆贊成在一個很好的例子非常感謝你的時間 – stedotmartin 2011-02-16 08:52:28

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

這樣做的伎倆非常感謝你!!!!!:) – stedotmartin 2011-02-11 14:28:06

1

讓我做一個簡單的佈局,如果你的應用應該運行,如果你正在落下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>"; 
} 

這或多或少是因爲你需要做的短版。

希望它有幫助

相關問題