自定义删除操作出现「Trying to get property of non-object」错误求助
解决「Trying to get property of non-object」错误及正确实现批量删除逻辑
嘿,我帮你分析下问题所在,顺便把代码修正过来~
你遇到的「Trying to get property of non-object」错误,其实是个很常见的小坑:你用对象的属性访问符->去操作一个数组了!看你代码里的$res = $request->all();,Laravel的$request->all()返回的是关联数组,不是对象,所以$res->member_id这种写法肯定会报错,得改成数组访问方式$res['member_id']。当然,更优雅的方式是直接用请求对象的input()方法获取参数,能避免这种数组/对象混淆的问题。
另外看你代码没写完,我把完整的删除逻辑给你补上,分两种场景供你选择:
场景1:需要先查询记录再做额外处理(比如日志、关联数据清理)
public function TestDelet(AcademicoRequest $request) { // 直接从请求获取member_id,比用all()更清晰安全 $memberId = $request->input('member_id'); if ($memberId) { // 查询符合条件的所有学术记录 $academicos = Academico::where('member_id', $memberId)->get(); // 如果需要先处理这些记录(比如删除关联的其他表数据、打操作日志),可以遍历处理 foreach ($academicos as $academico) { // 示例:删除关联的论文记录 // DB::table('papers')->where('academico_id', $academico->id)->delete(); } // 批量删除符合条件的记录 $deletedCount = Academico::where('member_id', $memberId)->delete(); // 返回删除结果 return response()->json(['message' => "成功删除{$deletedCount}条学术记录"], 200); } // 如果没有传member_id,返回参数错误提示 return response()->json(['message' => '请提供有效的member_id参数'], 400); }
场景2:无需提前查询,直接删除(更高效)
如果不需要先获取记录做额外操作,直接执行删除语句就行,效率更高:
public function TestDelet(AcademicoRequest $request) { $memberId = $request->input('member_id'); if ($memberId) { // 直接批量删除符合条件的记录,返回删除条数 $deletedCount = Academico::where('member_id', $memberId)->delete(); return response()->json(['message' => "成功删除{$deletedCount}条学术记录"], 200); } return response()->json(['message' => '请提供有效的member_id参数'], 400); }
额外提醒
- 尽量用Eloquent模型(
Academico::where(...))代替DB门面,代码更简洁,还能利用模型的事件钩子(比如deleted事件)做后续处理。 - 记得在
AcademicoRequest里做好member_id的验证规则,比如设置为必填、整数类型,这样在进入控制器之前就能拦截无效参数,减少后续逻辑出错的可能。 - 批量删除的时候不用手动遍历ID逐个删除,Laravel的
delete()方法本身就支持批量操作,性能更好。
内容的提问来源于stack exchange,提问作者Vinícius Matos
相关产品推荐
相关产品推荐

