Laravel报Call to a member function where() on null错误如何解决
错误原因
报错Call to a member function where() on null本质是你调用where()方法的对象是null,对应代码的问题点如下:
find()是Eloquent用来按主键查单条记录的方法,你传入的参数是字符串'id'而非真实的主键ID值,数据库查不到匹配记录时会直接返回null,null不是对象实例,自然无法调用where()成员方法。- 模型命名不符合Laravel约定:Eloquent模型默认使用帕斯卡命名(大驼峰),
product_category正确的类名应为ProductCategory,类名写错会触发类加载异常,也会导致调用链断裂返回null。 - 查询逻辑语法完全错误:
find()执行后已经返回单条模型结果(或null),不需要再链式调用where()、get();且where()方法至少需要传入两个参数(字段名、匹配值),你只传了字段名本身语法就不成立,get()是查询构造器获取多条结果的方法,和find()的单条查询场景完全不匹配。
修复方法
根据实际查询需求二选一调整代码即可:
- 场景1:查询全部分类/带条件的多条分类记录
// 替换为你实际的模型类名,全量查询直接用all() $product_category = ProductCategory::all(); // 带条件查询的正确写法示例:查询id大于0的分类 // $product_category = ProductCategory::where('id', '>', 0)->get(); return view('product_category', compact('product_category'));
- 场景2:查询指定ID的单条分类记录
// 把$id替换为你实际要查询的主键ID值,比如从路由/请求中获取的参数 $product_category = ProductCategory::find($id); // 增加兜底判断,查不到数据时返回404,避免后续模板渲染报错 if (is_null($product_category)) { abort(404); } return view('product_category', compact('product_category'));
内容的提问来源于stack exchange,提问作者neondeveloper27
相关产品推荐
相关产品推荐

