Laravel查询后访问notificationTypeName提示Undefined index错误如何解决
错误原因
- 调用
Notifications::where('status','false')->get()得到的是Eloquent集合,执行all()方法后返回的是索引数组,数组的键为从0开始的数字,不存在名为notificationTypeName的字符串键,所以直接访问会抛出索引不存在的错误。 - 该索引数组中存储的每一项都是
App\Models\Notifications模型实例,并非关联数组,就算先取对应下标的元素,也不能直接用数组下标访问属性。
解决方案
根据你的使用场景选择对应方案即可:
- 方案1:仅需要获取匹配条件的第一条记录
直接用first()方法替代get(),省去集合转数组的步骤,直接用对象语法访问属性:
$notification = Notifications::where('status','false')->first(); dd($notification->notificationTypeName);
- 方案2:需要获取所有匹配的记录,按需读取指定项的属性
先取对应索引的模型实例,再用对象语法访问属性:
$notification = Notifications::where('status','false')->get(); $data = $notification->all(); // 读取第一条记录的notificationTypeName属性 dd($data[0]->notificationTypeName);
- 方案3:需要用数组下标形式访问属性
先调用模型的toArray()方法将模型转为关联数组即可:
// 单条记录场景 $notification = Notifications::where('status','false')->first(); $arr = $notification->toArray(); dd($arr['notificationTypeName']); // 多条记录场景 $notification = Notifications::where('status','false')->get(); $arr = $notification->toArray(); dd($arr[0]['notificationTypeName']);
补充优化点:如果
status字段是布尔类型,建议查询条件直接传布尔值false而非字符串'false',避免部分数据库出现匹配异常。
内容的提问来源于stack exchange,提问作者user16664878
相关产品推荐
相关产品推荐

