【问题标题】:Laravel collection containing model to arrayLaravel 集合包含模型到数组
【发布时间】:2018-01-24 12:32:44
【问题描述】:

我有一个包含多个用户模型的 Laravel 集合。

Collection([
    User,
    User,
])

该模型包含例如用户名、名字、姓氏、电子邮件、出生日期。我只需要用户名、电子邮件、日期并将其放在这样的数组中。

array(
    array('jonhdoe', 'johndoe@example.com', '1-1-1970')
)

以便我可以使用

访问它
$username = $array[0][0]
$email = $array[0][1]

而不是

$username = $array[0]['username']
$email = $array[0]['email']

我正在查看每个 Laravel 助手或地图,但不知何故我无法让它工作。

【问题讨论】:

    标签: php laravel phpexcel laravel-5.5


    【解决方案1】:

    only() 将仅返回指定列的数组。而toArray() 会将集合转换为数组:

    $collection->map(function($i) {
        return array_values($i->only('username', 'email', 'date'));
    })->toArray();
    

    【讨论】:

    • 如果我查看 only() laravel.com/docs/5.5/collections#method-only 的文档,看起来我可以通过密钥访问模型中的项目,但我想通过它的编号访问它。
    • @Matthieu 不清楚。请提供更多细节并展示完整的收藏。
    • 因为它比 $array[0]['0']$array[0]['username'] 等一些随机数更详细和更具描述性。您可能会争辩说含义很明确,因为您将其存储到 $username,但这可能并不总是正确或必要的,因为您可以直接使用数组 + 键。甚至$array 的名字也很糟糕。变量名不应反映类型,而应反映其内容的含义。当有一天有人决定在 usernameemail 之间的数组中添加另一个值时,您的代码会中断 -> $i->only('username', 'foo', 'email', 'date')
    • 最后我不得不放弃 toArray(),但其余的代码就像一个魅力。
    • @Matthieu 很高兴它有帮助。
    【解决方案2】:

    使用toArray()-

    $collection_in_arrays = $collection->toArray();
    

    toArray 方法将集合转换为普通的PHP array。如果collection's 的值为Eloquent 模型,则模型也将转换为arrays

    【讨论】:

      猜你喜欢
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 2019-02-14
      • 2016-05-19
      • 2018-01-16
      • 2021-06-21
      • 2012-01-24
      相关资源
      最近更新 更多