2011-02-11 73 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>"; 
} 

这或多或少是因为你需要做的短版。

希望它有帮助

相关问题