未定义的索引,无法获取列 - Laravel

Posted

技术标签:

【中文标题】未定义的索引,无法获取列 - Laravel【英文标题】:Undefined index , Unable to fetch columns- Laravel 【发布时间】:2021-10-17 06:46:09 【问题描述】:
 $notification=Notifications::where('status','false')->get();
 $data=$notification->all();
 //dd($data);
 dd($data['notificationTypeName']);

在上面的代码中,Notifications 是模型名称。尝试访问数组$data 的列notificationTypeName 时出现错误Undefined index: notificationTypeName

dd($data) 给出如下输出:

array:4 [
  0 => App\Models\Notifications #323
    #table: "notifications"
    #fillable: array:6 [
      0 => "notificationTypesId"
      1 => "notificationTypeName"
      2 => "userId"
      3 => "email"
      4 => "status"
      5 => "recipientName"
    ]
    #connection: "pgsql"
    #primaryKey: "id"
    #keyType: "int"
    +incrementing: true
    #with: []
    #withCount: []
    +preventsLazyLoading: false
    #perPage: 15
    +exists: true
    +wasRecentlyCreated: false
    #attributes: array:9 [
      "id" => 5
      "notificationTypesId" => 3
      "notificationTypeName" => "Cart Expired"
      "userId" => 1
      "email" => "me.g@k.com"
      "recipientName" => "John"
      "status" => false
      "created_at" => null
      "updated_at" => null
    ]
    #original: array:9 [
      "id" => 5
      "notificationTypesId" => 3
      "notificationTypeName" => "Cart Expired"
      "userId" => 1
      "email" => "me.g@k.com"
      "recipientName" => "John"
      "status" => false
      "created_at" => null
      "updated_at" => null
    ]
    #changes: []
    #casts: []
    #classCastCache: []
    #dates: []
    #dateFormat: null
    #appends: []
    #dispatchesEvents: []
    #observables: []
    #relations: []
    #touches: []
    +timestamps: true
    #hidden: []
    #visible: []
    #guarded: array:1 [
      0 => "*"
    ]
    #enableLoggingModelsEvents: true
    #oldAttributes: []
  

【问题讨论】:

使用 foreach 从对象中获取数据 @RushikeshGanesh 我需要在不使用 foreach 的情况下获取列,因为每次获取时我都需要输出中来自 db 的所有行。这就是我面临的问题。 试试dd($data[0]['notificationTypeName']); 在 $notification 中有多少条记录是单条还是多条 【参考方案1】:

all 方法返回集合表示的底层数组:

看到这个:https://laravel.com/docs/8.x/collections#method-all

所以试试这个:

 dd($data[0]['notificationTypeName']) // if u r not going to use foreach

foreach

foreach( $notifications as $notification)

  dd($notification->notificationTypeName);

【讨论】:

这行得通。但是我的代码中有另一行,例如tap($data)->update(['status'=>'true']);。现在这段代码显示错误Call to a member function update() on array 尝试使用带有特定索引的tap($data[0]),但如果您不想使用foreach,我建议使用foreach 或更好地通过id 查找通知

以上是关于未定义的索引,无法获取列 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:未定义的索引 - 数组键不存在

未定义索引(Laravel)

消息:未定义的索引:获取列名时(两个具有相同列的表)Codeigniter

Laravel 迁移未定义索引

Laravel PackageManifest.php:未定义索引:名称

使用新模型和保护的 Laravel 身份验证失败:未定义索引:模型