这是我的控制器
if ( $training_code == null || $batch_no == null)
{
$data = $this->_public_data();
$no_reg = $this->sys_model->get_registration($this->session->userdata('admin'))->no_reg;
$data['trainingl_list']= $this->sys_model->list_training_by_user($no_reg);
}
这是在我的模型中
function list_training_by_user($no_reg)
{
$this->db->where('no_reg', $no_reg);
return $this->db->get('tbl_peserta_training')->row();
}
这是我的观点
<?php foreach($trainingl_list as $row){
echo $row->kd_training; //<-- this is 13th line
echo $row->no_batch; //<-- this is 19th line
?>
它得到了
Severity: Notice
Message: Trying to get property of non-object
Line Number: 13, 19
如果我只是在我的视图中回显$ noreg(通过将其放入$ data ['noreg'] = $ no_reg),它没有错误,但是使用$ training_list数组,并将其放入foreach中,在我看来,我得到了那些错误 我错过了什么吗?
答案 0 :(得分:1)
$training_list
来自list_training_by_user()
吗?如果是这样,list_training_by_user()
只返回一行,而不是行列表。因此,迭代该行无效。您可能需要尝试这样的事情:
function list_training_by_user($no_reg)
{
$this->db->where('no_reg', $no_reg);
$result = $this->db->get('tbl_peserta_training');
$results = array();
while ($row = $result->row()) {
$results[] = $row;
}
return $results;
}
修改强>
更好的是,您应该返回result()
,这似乎是Iterator的一个实例:
function list_training_by_user($no_reg)
{
$this->db->where('no_reg', $no_reg);
return $this->db->get('tbl_peserta_training')->result();
}
编辑2
由于我的第一个示例和result()
方法(请参阅注释)存在内存问题,我们一次只能加载一个结果。您必须返回查询并从该对象一次获取一行。
function list_training_by_user($no_reg)
{
$this->db->where('no_reg', $no_reg);
return $this->db->get('tbl_peserta_training');
}
然后在你看来:
$results = $this->sys_model->list_training_by_user($no_reg);
while ($row = $results->row()) {
echo $row->kd_training; //<-- this is 13th line
echo $row->no_batch; //<-- this is 19th line
}
不幸的是,CodeIgnitor result()
方法将所有结果加载到单个数组中,就像我的第一个解决方案一样。当然,如果你有大量的结果,这不是内存效率。每行都需要延迟加载。如果你想要一个漂亮的替代品,你可以编写一个实现Iterator interface到自动延迟加载结果行的类,同时在foreach
循环中迭代结果,我可以告诉你看起来像什么如果你愿意的话。
答案 1 :(得分:0)
模特:
function list_training_by_user($no_reg)
{
$this->db->where('no_reg', $no_reg);
$result=$this->db->get('tbl_peserta_training');
return $result->$result_array();
}
控制器
$data=$this->model_name->list_training_by_user($no_reg);
$this->load->view("your_view_name",array('trainingl_list'=>$data));
并在视图中使用它
<?php
foreach($trainingl_list as $row){
echo $row['kd_training']; //<-- this is 13th line
echo $row['no_batch']; //<-- this is 19th line
}
?>
或
In model :
function list_training_by_user($no_reg)
{
$this->db->where('no_reg', $no_reg);
$result=$this->db->get('tbl_peserta_training');
return $result->result();
}
控制器:与earliar相同;
并在视图中使用它
foreach($trainingl_list as $row){
echo $row->kd_training; //<-- this is 13th line
echo $row->no_batch; //<-- this is 19th line
}
?>