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;
}

編集

さらに良いことに、 Iteratorresult()のインスタンスのように見える を返す必要があります。

function list_training_by_user($no_reg)
{
    $this->db->where('no_reg', $no_reg);
    return $this->db->get('tbl_peserta_training')->result(); 
}

編集2

最初の例とresult()メソッド (コメントを参照) のメモリの問題により、一度に 1 つの結果のみをロードする必要があります。クエリを返し、そのオブジェクトから一度に 1 行ずつフェッチする必要があります。

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()結果を 1 つの配列にロードします。もちろん、かなりの数の結果がある場合、これはメモリ効率が良くありません。各行は遅延ロードする必要があります。美しい代替案が必要な場合は、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 に答える