我正在使用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');
}
}
答案 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>