【问题标题】:Laravel: Convert Eloquent collection to Array without converting elementsLaravel:将 Eloquent 集合转换为数组而不转换元素
【发布时间】: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\CollectionIlluminate\Database\Eloquent\Collection 上的 all 方法似乎有所不同。 Eloquent 集合上的 all 返回一个支持集合,支持集合返回一个数组。

所以要获得一组 Eloquent 模型,您需要使用 SomeModel::all()->all();

【问题讨论】:

    标签: php arrays laravel collections


    【解决方案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()
      猜你喜欢
      • 2016-05-12
      • 2019-08-10
      • 1970-01-01
      • 2018-08-11
      • 2017-06-30
      • 2019-01-05
      • 2019-07-05
      相关资源
      最近更新 更多