Laravel:将Eloquent集合转换为数组而不转换元素

时间:2018-11-08 16:16:25

标签: php arrays laravel collections

是否有一种(简单的)方法可以将Eloquent Collection转换为实际数组而不转换元素本身?

当我尝试将集合传递到类似array_rand($collection)的php方法时遇到麻烦。这给了我错误:array_rand() expects parameter 1 to be array, object given

我通过使用$collection->shuffle()->first();来解决此问题,该方法工作正常,当然我可以遍历集合并将所有内容按数组推送,但是出于好奇,我想知道我是否忽略了某些内容。

更新/结论

allIlluminate\Support\Collection上的Illuminate\Database\Eloquent\Collection方法之间似乎有所不同。 Eloquent集合上的all返回一个Support集合,Support Collection返回一个数组。

因此,要获得一系列口才的模型,您需要使用SomeModel::all()->all();

2 个答案:

答案 0 :(得分:3)

我的第一个想法是$collection->toArray(),但这也将Eloquent模型转换为数组。但是docs$collection->all()应该避免这种情况。

  

toArray还将集合的所有嵌套对象转换为数组。如果要获取原始基础数组,请改用all方法。

答案 1 :(得分:2)

您可以使用all收集助手:

  

all方法返回由表示的基础数组   集合:

collect([1, 2, 3])->all();

// [1, 2, 3]