Laravel:将 Eloquent 集合转换为数组而不转换元素
Posted
技术标签:
【中文标题】Laravel:将 Eloquent 集合转换为数组而不转换元素【英文标题】:Laravel: Convert Eloquent collection to Array without converting elements 【发布时间】:2019-04-12 04:50:54 【问题描述】:有没有一种(简单的)方法可以将 Eloquent 集合转换为实际数组,而无需转换元素本身?
当我尝试将集合传递到像array_rand($collection)
这样的php 方法时遇到了麻烦。这给了我错误:array_rand() expects parameter 1 to be array, object given
。
我通过使用 $collection->shuffle()->first();
解决了这个问题,它工作正常,当然我可以遍历集合并将所有内容推送到一个数组中,但出于好奇,我想知道我是否忽略了某些东西。
更新/结论
Illuminate\Support\Collection
和 Illuminate\Database\Eloquent\Collection
上的 all
方法似乎有所不同。
Eloquent 集合上的 all 返回一个支持集合,支持集合返回一个数组。
所以要获得一组 Eloquent 模型,您需要使用 SomeModel::all()->all();
【问题讨论】:
【参考方案1】:我的第一个想法是$collection->toArray()
,但这也将 Eloquent 模型转换为数组。但是docs 说$collection->all()
应该避免这种情况。
toArray
还将集合的所有嵌套对象转换为数组。如果要获取原始底层数组,请改用all
方法。
【讨论】:
【参考方案2】:您可以使用all 收集助手:
all 方法返回由 收藏:
collect([1, 2, 3])->all();
// [1, 2, 3]
【讨论】:
啊,这似乎确实适用于“Illuminate\Support\Collection”。由于我是从 Eloquent 模型 ('Illuminate\Database\Eloquent\Collection') 中获取集合的,因此我的印象是我使用的所有SomeModel::all()
已经相同。但现在我看到我需要对结果再做一次全调用:SomeModel::all()->all()
。以上是关于Laravel:将 Eloquent 集合转换为数组而不转换元素的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5 Eloquent - 将计算值作为列添加到集合
Laravel 将 SQL 转换为 Eloquent:按 sum() 排序
将 MariaDB 语句转换为 Laravel4 Eloquent-Query
如何通过索引将项目添加到 Laravel Eloquent 集合中?