php - 在 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
获得相同的结果来访问数据时,这是正确的。
这让我很困惑。这里的实际区别是什么,对我们的应用程序有什么影响?
解决方案
Laravel 集合实现了“Arrayable”,这意味着它们继承了与普通数组相同的所有功能,但也具有集合提供的附加功能,因此在索引处访问不会有任何问题。
如果您想将其转换回普通数组,您可以这样做->toArray()
$users = DB::table('users')->select('id','first_name')->limit(10)->get()->toArray();
推荐阅读
- sql-server - 参数化存储过程分页返回基于除pagesize参数之外的参数的行数
- postgresql - 用户插补时插入语句不起作用
- python - Python如何使用绝对导入
- linux - 有没有办法通过命令行从网页转储加载的脚本?
- python - keras.Model 和 keras.engine.training.Model 有什么区别?
- php - 如何使用 PHP 在 Twilio 中传递自定义参数?
- android - 如何在 Android 中实现类似 Page/Form sheet 的 iOS 13 新卡片?
- javascript - 如何在 react-native 中过滤 JavaScript 对象
- mysql - 如何更新每列中具有不同值的多行
- amazon-web-services - 如何使用数据管道中的实例队列旋转 EMR 集群?