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

Arn*_*rdt 4 php arrays collections laravel

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

当我尝试将集合传递到像array_rand($collection). 这给了我错误:array_rand() expects parameter 1 to be array, object given

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

更新/结论

allaIlluminate\Support\Collection和 a上的方法似乎有所不同Illuminate\Database\Eloquent\Collection。Eloquent 集合上的 all 返回一个支持集合,支持集合返回一个数组。

因此,要获得您需要使用的 Eloquent 模型数组 SomeModel::all()->all();

Pet*_*ter 8

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

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


Rem*_*mul 6

您可以使用all集合助手:

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

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

// [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

  • 啊,这似乎确实适用于“Illuminate\Support\Collection”。由于我从 Eloquent 模型('Illuminate\Database\Eloquent\Collection')获取集合,我的印象是我使用的所有 `SomeModel::all()` 已经是相同的了。但现在我发现我需要对结果进行另一个全调用:`SomeModel::all()->all()`。 (3认同)