1

这是在我的控制器里面

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 中,我得到了那些错误我错过了什么吗?

4

2 回答 2

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 接口的类,以便在循环中迭代结果时自动延迟加载结果行,如果您愿意,我可以向您展示它的外观。foreach

于 2013-06-16T10:32:09.397 回答
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();

}

控制器:与之前相同;

并在视图中使用它

foreach($trainingl_list as $row){
   echo $row->kd_training; //<-- this is 13th line
   echo $row->no_batch; //<-- this is 19th line
}
?>
于 2013-06-16T12:12:31.127 回答