Многоуровневый список с CodeIgniter

Я недавно работаю с CodeIgniter и PHP. Я пытаюсь выполнить простую задачу, чтобы показать многоуровневое меню. Скажем, у меня есть студент и таблица состояния. Я хочу показать, какие студенты находятся под каким статусом (старший, младший и т.д.). Но я получаю эту ошибку:

A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: views/sview.php
Line Number: 31

В строке 31 у меня есть

<!--?php echo $status--->statusname;?>

Контроллер:

// ....
$data['status'] = $this->status_model->get_students();
$this->load->view('sview', $data);

Модель:

function get_students(){
 $s = $this->db->get('status');
 foreach ($s->result() as $status){
 $students = $this->db->get_where('student', array('status_id'=>$status->id));
 $status->students = students->result();
 }
 return $s;
}

Вид:

<!--?php foreach($s as $status):?-->
 <h4><!--?php echo $status--->statusname;?></h4>
 <!--?php foreach($status--->student as $student):?>
 <!--?php echo $student--->studentname; ?>
 <!--?php endforeach;?-->
<!--?php endforeach;?-->
2 ответа

Вы не изменяете $s в цикле в get_students(), поэтому он просто возвращает исходный запрос всех записей из таблицы состояния. Вам также не хватает "$" в переменной $students в вашем цикле.

Попробуйте эту модель:

function get_students()
{
 $s = $this->db->get('status');
 $statuses = array();
 foreach ($s->result() as $status)
 {
 $students = $this->db->get_where('student', array('status_id'=>$status->id));
 $status->students = $students->result();
 $statuses[] = $status;
 }
 return $statuses;
}

Это вернет измененные переменные $status в массиве $statuses, а затем вы сможете получить к ним доступ в своих представлениях.


Ваш контроллер устанавливает $data['status'] вверх со всеми различными статусами, на которые он похож. Попытайтесь изменить в своем представлении следующее:

<!--?php foreach($status as $s):?-->
 <h4><!--?php echo $s--->statusname;?></h4>
 <!--?php foreach($s--->student as $student):?>
 <!--?php echo $student--->studentname; ?>
 <!--?php endforeach;?-->
<!--?php endforeach;?-->

licensed under cc by-sa 3.0 with attribution.