Laravel 中处理 API 返回数组时的常见错误:非对象属性访问问题

发布时间 - 2026-01-11 00:00:00    点击率:

当使用 laravel 从 api(如 rawg)获取数据时,若误将数组当作对象访问(如 `$result->name`),会触发 “trying to get property 'name' of non-object” 错误;根本原因是 api 响应为关联数组而非 stdclass 对象,需统一使用数组语法访问。

在调用类似 RAWG 这类 RESTful API 时,第三方 SDK(如 \Rawg::load('games')->get())通常默认返回的是 关联数组(尤其是 JSON 解析后未强制转为对象),而非 PHP 对象。因此,直接使用对象箭头语法($result->name)会导致运行时错误 —— 因为 $result 实际是 array 类型,不支持 -> 访问。

正确做法是:
✅ 明确识别响应结构(可通过 dd($response) 或 var_dump($response) 调试);
✅ 确认数据位于 $response['results'](而非直接遍历 $response);
✅ 所有字段均使用数组下标语法($result['key']),嵌套结构同理。

以下是修正后的完整示例代码:

$response = \Rawg::load('games')
    ->setParams([
        'page' => 1,
        'page_size' => 40,
        'ordering' => '-rating',
    ])
    ->get();

// 关键修正:遍历 $response['results'],且全部使用数组语法
if (isset($response['results']) && is_array($response['results'])) {
    foreach ($response['results'] as $result) {
        // 注意:ratings 和 platforms 均为数组,需校验索引存在性
        $ratingTitle = !empty($result['ratings'][0]['title']) 
            ? $result['ratings'][0]['title'] 
            : null;

        $platformName = !empty($result['platforms'][0]['platform']['name']) 
            ? $result['platforms'][0]['platform']['name'] 
            : null;

        Games::insert([
            'name' => $result['name'] ?? 'Unknown Game',
            'ratings' => $ratingTitle,
            'platforms' => $platformName,
        ]);
    }
}

⚠️ 重要注意事项

  • 永远不要假设嵌套数组索引一定存在 —— ratings[0] 或 platforms[0] 可能为空或缺失,务必使用 !empty() 或 ?? 提供默认值,避免“Undefined index”错误;
  • 若需更健壮的数据提取逻辑,建议封装为辅助方法或使用 Laravel 的 data_get() 辅助函数(例如:data_get($result, 'ratings.0.title'));
  • 如需强制返回对象,可在 HTTP 客户端层设置 json_decode($json, false),但需确保 SDK 支持该配置;多数情况下,适配数组结构更安全、更符合 REST API 实际响应规范。

总结:该错误本质是类型误判,解决核心在于「看清数据结构、用对访问语法、做好空值防护」。


# php  # laravel  # js  # json  # rest api  # restful api  # restful  # Array  # Object  # 关联数组  # 封装  # 数据结构  # Property  # undefined  # 对象  # http  # 而非  # 遍历  # 的是  # 尤其是  # 均为  # 这类  # 可在  # 不支持  # 可通过 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 焦点电影公司作品,电影焦点结局是什么?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何在IIS中新建站点并配置端口与物理路径?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何基于云服务器快速搭建个人网站?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何在Ubuntu系统下快速搭建WordPress个人网站?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  教你用AI将一段旋律扩展成一首完整的曲子  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  Laravel distinct去重查询_Laravel Eloquent去重方法  进行网站优化必须要坚持的四大原则  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Laravel如何优化应用性能?(缓存和优化命令)  Laravel如何处理异常和错误?(Handler示例)  Laravel Docker环境搭建教程_Laravel Sail使用指南  C++时间戳转换成日期时间的步骤和示例代码  企业网站制作这些问题要关注  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  智能起名网站制作软件有哪些,制作logo的软件?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  简单实现jsp分页  iOS验证手机号的正则表达式  如何挑选优质建站一级代理提升网站排名?  如何快速搭建高效简练网站?  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  如何用5美元大硬盘VPS安全高效搭建个人网站?  奇安信“盘古石”团队突破 iOS 26.1 提权  Laravel如何使用withoutEvents方法临时禁用模型事件  C#如何调用原生C++ COM对象详解  原生JS实现图片轮播切换效果  如何登录建站主机?访问步骤全解析  如何获取上海专业网站定制建站电话?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  Laravel如何实现事件和监听器?(Event & Listener实战)  音乐网站服务器如何优化API响应速度?