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

12
是否有一种简单的方法将Eloquent Collection转换为实际数组,而不需要转换元素本身?
当我尝试将集合传递到像array_rand($collection)这样的php方法时,我会遇到麻烦。这给了我一个错误:array_rand() expects parameter 1 to be array, object given
我通过使用$collection->shuffle()->first();来解决这个问题,这很好用。当然,我可以循环遍历整个集合,并将所有内容推送到数组中,但是出于好奇心,我想知道是否有什么我忽略的东西。
更新/结论
似乎Illuminate\Support\CollectionIlluminate\Database\Eloquent\Collection上的all方法之间存在区别。 Eloquent Collection上的all返回Support Collection,而Support Collection返回Array。
因此,要获取Eloquent模型的数组,您需要使用SomeModel::all()->all();
2个回答

15

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

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


7
您可以使用all集合助手:

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

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

// [1, 2, 3]

3
啊,这似乎确实适用于 'Illuminate\Support\Collection'。由于我从一个 Eloquent 模型 ('Illuminate\Database\Eloquent\Collection') 中获取了集合,所以我认为我使用的 SomeModel::all() 已经是相同的。但现在我看到我需要对结果进行另一个 all-call:SomeModel::all()->all() - Arno van Oordt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接