Многоуровневый список с 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(), поэтому он просто возвращает исходный запрос всех записей из таблицы status. Вы также пропускаете ' $ ' в переменной$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;?>
Comments