Laravel中$meal的id获取报错:数组与对象访问方式冲突排查
问题分析与解决方案
核心问题是你的$meal数据类型不统一——部分是Recipe模型实例,部分是包含Recipe数据的数组,这就导致你用$meal->id时,数组类型的$meal会报属性读取错误;用$meal['id']时,模型对象类型的$meal会报数组键不存在错误。
快速解决方式
直接在获取id前判断数据类型,适配两种场景:
// 方式1:显式判断类型 if (is_object($meal)) { $id = $meal->id; } elseif (is_array($meal)) { // 根据实际数组结构调整,若数组是一维则取['id'],是二维则取[0]['id'] $id = $meal['id'] ?? $meal[0]['id'] ?? null; } // 方式2:统一转成数组后处理 $mealData = is_object($meal) ? $meal->toArray() : $meal; $id = $mealData['id'] ?? $mealData[0]['id'] ?? null;
根源修复建议
找到生成mealPlan数组的代码,排查为什么会同时产出模型对象和数组:
- 检查是否部分查询用了
get()(返回集合,转数组后是二维数组),部分用了first()(返回单个模型对象); - 确认是否有手动组装数组的逻辑,存在“直接塞模型对象”和“转成数组后塞进去”两种操作;
统一输出格式,比如全部转成数组,或者全部保留模型对象,从根源避免类型混乱。
内容的提问来源于stack exchange,提问作者Rubyx
相关产品推荐
相关产品推荐

