CodeIgniter视图无法显示teacher's remark教师评语数据问题
故障原因
- 变量名不匹配:控制器向视图传递的数据键名为
exam_result,CodeIgniter框架加载视图时会将$data数组的键转换为独立变量,视图内不存在你调用的$student变量,自然无法读取属性。 - 数据结构认知错误:模型返回的
$data['exam_result']是$query->result()生成的对象数组(包含多条考试记录),不是单个对象,无法直接调用属性取值。 - 取值路径错误:模型中是将教师评语所属的考试结果集,挂载到每条考试记录对象的
exam_result子属性下,teacher_remark并不在考试记录对象的根层级,直接从根对象读取必然取不到值。 - 遍历逻辑隐患:模型中foreach循环直接操作遍历生成的临时变量
$student_exam_value,未通过数组下标回写原数组,部分PHP版本/场景下会出现新增属性丢失的问题。
修复方案
- 修正模型层遍历逻辑,确保子查询结果正确写入原结果集:
// 模型 searchStudentExams 方法内循环部分替换为以下代码 if (!empty($student_exam)) { foreach ($student_exam as $key => $exam) { $student_exam[$key]->exam_result = $this->examresult_model->getStudentExamResults( $exam->exam_group_class_batch_exam_id, $exam->exam_group_id, $exam->id, $exam->student_id ); } }
- 修正视图层取值逻辑,按照实际数据结构遍历读取字段,增加空值兼容避免报错:
<!-- 视图输出代码替换为以下内容 --> <?php if (!empty($exam_result)): ?> <?php foreach ($exam_result as $single_exam): ?> <?php $remark = $single_exam->exam_result->teacher_remark ?? '暂无教师评语'; ?> Teacher's Remark: <?php echo $remark; ?> <?php endforeach; ?> <?php endif; ?>
注:如果
getStudentExamResults返回的是数组格式而非对象,将$single_exam->exam_result->teacher_remark调整为$single_exam->exam_result['teacher_remark']即可,和你打印出来的数据源结构保持一致。
- 若业务需要在视图中使用
$student变量,在控制器中提前赋值到$data数组即可,例如:$data['student'] = $this->student_model->get($id);
内容的提问来源于stack exchange,提问作者MaryPebbles
相关产品推荐
相关产品推荐

