首页 > 解决方案 > 在 Laravel 中访问普通数组和集合数组时得到相同的结果升级 5.2 到 5.3

问题描述

我已经将我们的 Laravel 应用程序从 Laravel 5.2 升级到了 5.3,并从 Laravel 端收到了一条警告消息

在 Laravel 5.3 中,查询构建器返回集合,而不是普通数组。您将需要升级代码以使用集合或将 all() 方法链接到查询以返回纯数组。

这意味着流畅的查询构建器现在返回 Illuminate\Support\Collection 实例而不是普通数组。这为 fluent 查询构建器和 Eloquent 返回的结果类型带来了一致性。

您可以通过以下示例对此进行标准化

拉拉维尔 5.2

    $users = DB::table('users')->select('id','first_name')->limit(10)->get();

   dd($users);

   Result : 
   ==========
    array:10 [▼
      0 => {#1423 ▼
        +"id": 12
        +"first_name": "John"
      }
      1 => {#1424 ▶}
      2 => {#1425 ▶}
      3 => {#1426 ▶}
      4 => {#1427 ▶}
      5 => {#1428 ▶}
      6 => {#1429 ▶}
      7 => {#1430 ▶}
      8 => {#1431 ▶}
      9 => {#1432 ▶}
    ]

拉拉维尔 5.3

$users = DB::table('users')->select('id','first_name')->limit(10)->get();

dd($users);



 Result : 
   ==========
    Collection {#1428 ▼
      #items: array:10 [▼
        0 => {#1430 ▼
          +"id": 12
          +"first_name": "John"
        }
        1 => {#1431 ▶}
        2 => {#1432 ▶}
        3 => {#1433 ▶}
        4 => {#1434 ▶}
        5 => {#1435 ▶}
        6 => {#1436 ▶}
        7 => {#1437 ▶}
        8 => {#1438 ▶}
        9 => {#1439 ▶}
      ]
    }

当我试图通过$users[0]->first_name获得相同的结果来访问数据时,这是正确的。

这让我很困惑。这里的实际区别是什么,对我们的应用程序有什么影响?

标签: phplaravellaravel-5

解决方案


Laravel 集合实现了“Arrayable”,这意味着它们继承了与普通数组相同的所有功能,但也具有集合提供的附加功能,因此在索引处访问不会有任何问题。

如果您想将其转换回普通数组,您可以这样做->toArray()

$users = DB::table('users')->select('id','first_name')->limit(10)->get()->toArray();

推荐阅读