Laravel 9 报错:尝试读取null对象的"id"属性(IndexController第23行)
Laravel 9 错误:Attempt to read property "id" on null 解决方法
问题原因
在app\Http\Controllers\Frontend\IndexController.php文件第23行触发该错误,核心原因是:通过Category::skip(n)->first()查询分类时,若数据库中没有足够的分类数据(比如分类总数小于n+1),查询结果会返回null,此时直接访问->id属性就会抛出"Attempt to read property 'id' on null"错误。
另外你的代码存在一处逻辑错误:$skip_news_1的查询条件误用了$skip_cat_2->id,应该改为$skip_cat_1->id。
修复方案
方案1:先判断分类是否存在,再关联查询新闻
在获取新闻前先检查分类对象是否有效,避免访问null的属性:
public function Index() { // 处理第一个分类及新闻 $skip_cat_0 = Category::skip(0)->first(); $skip_news_0 = collect(); // 默认返回空集合,避免视图报错 if ($skip_cat_0) { $skip_news_0 = NewsPost::where('status', 1) ->where('category_id', $skip_cat_0->id) ->orderBy('id', 'DESC') ->limit(5) ->get(); } // 处理第二个分类及新闻 $skip_cat_2 = Category::skip(2)->first(); $skip_news_2 = collect(); if ($skip_cat_2) { $skip_news_2 = NewsPost::where('status', 1) ->where('category_id', $skip_cat_2->id) ->orderBy('id', 'DESC') ->limit(6) ->get(); } // 处理第三个分类及新闻(修正了原代码的逻辑错误) $skip_cat_1 = Category::skip(1)->first(); $skip_news_1 = collect(); if ($skip_cat_1) { $skip_news_1 = NewsPost::where('status', 1) ->where('category_id', $skip_cat_1->id) // 原代码误用了$skip_cat_2->id ->orderBy('id', 'DESC') ->limit(6) ->get(); } return view('frontend.index', compact('skip_cat_0', 'skip_news_0', 'skip_cat_2', 'skip_news_2', 'skip_cat_1', 'skip_news_1')); }
方案2:使用optional()方法安全访问属性
Laravel提供的optional()方法可以在对象为null时返回null,避免直接访问属性报错,但要注意这种情况下会查询category_id为null的新闻,需根据业务需求判断是否适用:
$skip_cat_0 = Category::skip(0)->first(); $skip_news_0 = NewsPost::where('status', 1) ->where('category_id', optional($skip_cat_0)->id) ->orderBy('id', 'DESC') ->limit(5) ->get();
方案3:确保数据库有足够分类数据或动态调整skip值
如果业务要求必须基于指定skip的分类查询新闻,可以先统计分类总数,动态调整查询逻辑:
$categoryCount = Category::count(); // 仅当分类总数足够时才查询对应分类的新闻 $skip_cat_0 = $categoryCount > 0 ? Category::skip(0)->first() : null; $skip_news_0 = $skip_cat_0 ? NewsPost::where('status',1)->where('category_id', $skip_cat_0->id)->orderBy('id','DESC')->limit(5)->get() : collect();
内容的提问来源于stack exchange,提问作者Arief Affandi
相关产品推荐
相关产品推荐

