校园管理系统报错:Attempt to read property 'week_id' on null 求助
解决'Attempt to read property "week_id" on null'报错及实现当日课程展示
问题根源
date('1')是错误的日期格式参数,它会直接输出字符串'1',而非当前星期的有效标识(数字/名称),导致week1model::getWeekUsingName查询不到对应数据库记录,返回null,后续调用$getWeek->week_id触发报错。- 代码未对
$getWeek的空值情况做判断,即使日期参数正确,也可能因数据库无对应星期记录报错。
修复步骤
1. 修正日期格式参数,获取正确星期标识
根据week1model表中name字段的存储格式,选择对应日期参数:
- 若存储星期数字(1=周一,7=周日):用
date('N') - 若存储英文星期全称:用
date('l') - 若存储中文星期名称:用Carbon工具转换(Laravel默认集成)
示例(假设name字段存数字1-7):
static public function getMyTimeTable($class_id, $subject_id) { // 获取当前星期的数字标识(1-7) $weekNum = date('N'); $getWeek = week1model::getWeekUsingName($weekNum); // 空值判断,避免后续报错 if (!$getWeek) { return null; } return ClassSubjectTimetable::getRecordClassSubject($class_id, $subject_id, $getWeek->week_id); }
2. (可选)用Carbon优化星期获取逻辑(适配中文场景)
如果数据库存储中文星期名称(如"星期一"),可借助Carbon实现:
use Carbon\Carbon; static public function getMyTimeTable($class_id, $subject_id) { // 获取当前中文星期名称 $weekName = Carbon::now()->locale('zh')->dayName; $getWeek = week1model::getWeekUsingName($weekName); if (!$getWeek) { return null; } return ClassSubjectTimetable::getRecordClassSubject($class_id, $subject_id, $getWeek->week_id); }
3. 数据库校验
检查week1model对应的数据库表,确保所有星期的记录已完整插入(如1-7或周一至周日等),避免因缺少记录导致查询返回null。
视图层说明
现有Blade视图中的@if(!empty($ClassSubject))判断逻辑无需修改,会自动过滤无课程的情况,正常展示当日授课的时间、教室信息。
内容的提问来源于stack exchange,提问作者Allan
相关产品推荐
相关产品推荐

