【问题标题】:Laravel 5.6 get all rows as arrays of values using Eloquent ORMLaravel 5.6 使用 Eloquent ORM 将所有行作为值数组获取
【发布时间】:2018-07-26 15:36:42
【问题描述】:

我有一个雄辩的查询返回一个集合:

$items = Item::get(['id', 'name']);

当我转换为 JSON 时,我得到了这个:

[
    {id: 1, name: "some name"},
    {id: 2, name: "some other name"}
]

我想要这样的结果:

[
    [1, "some name"],
    [2, "some other name"]
]

如何使用 Laravel 5.6 和 eloquent ORM 实现这一目标?

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案1】:

    你可以使用 toArray 方法

    $items = Item::get(['id', 'name'])->map(function($item) {
        return array_values($item->toArray());
    });
    

    你的 $item 变量会是这样的:

    Illuminate\Support\Collection {
         all: [
           [
            1,
            "Peter",
           ],
           [
             2,
             "Juan",
           ],
       ];
    

    还有 json 表示:

    [[1, "Peter"], [2, "Juan"]]
    

    【讨论】:

    • 我得到了与以前完全相同的结果。键没有被删除,对象仍然存在。
    • 但是当我将你的 return 语句包装在 php 的 array_values 函数中时,我得到了我想要的:return array_values($item->toArray());。您可以编辑您的答案以反映这一点,我会接受您的答案。感谢您的帮助。
    • 它不能与toArray() 一起工作的原因是因为返回的数组是一个关联数组,必须被展平。
    • 没错,我忘了放array_values函数,我的错,但我很高兴你解决了它
    【解决方案2】:

    我收到关于内部 toArray() 的错误,所以这对我有用:

    $items = Item::get(['id', 'name'])->map(function($item) {
        return array_values((array)$item);
    })->toArray();
    

    【讨论】:

      【解决方案3】:

      使用pluck方法来实现

      $items = \App\Item::pluck('name', 'id');
      

      【讨论】:

      • pluck 返回一个以 id 为键、名称为值的对象。和我想要的不一样。
      猜你喜欢
      • 2018-08-07
      • 2018-01-17
      • 2013-12-24
      • 1970-01-01
      • 2017-07-07
      • 2020-04-24
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多