You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

校园管理系统报错:Attempt to read property 'week_id' on null 求助

解决'Attempt to read property "week_id" on null'报错及实现当日课程展示

问题根源

  1. date('1')是错误的日期格式参数,它会直接输出字符串'1',而非当前星期的有效标识(数字/名称),导致week1model::getWeekUsingName查询不到对应数据库记录,返回null,后续调用$getWeek->week_id触发报错。
  2. 代码未对$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:59:52