Laravel - 将数组转换为Eloquent集合

4

我需要使用API中的数据。

我创建了一个函数:

    public function getItems()
{
    $client = new \GuzzleHttp\Client();
    $res = $client->get('https://app.example.com/api/getItems');

$vouchers = json_decode($res->getBody(), true);

dd($vouchers);

return view('api', compact('vouchers'));


}

当我使用 dd($vouchers) 时,返回如下信息:

enter image description here

现在,当我尝试在Blade模板引擎中使用$vouchers数组时:

<body>
              @foreach ($vouchers as $v)
                <p>{{$v->name}}</p>
              @endforeach
          </body>

我遇到了错误:
"Trying to get property 'name' of non-object (View: .... etc...

我如何将数组转换为Eloquent集合。 我使用最新的Laravel 5.7版本。

你能执行 dd($vouchers['vouchers']); 并回传结果吗? - Mozammil
问题标题可能会误导一些人,而我解释问题标题的方式是,答案应该是 new \Illuminate\Database\Eloquent\Collection(<模型数组>); - user3563059
3个回答

13

实际上你的$vouchers是一个数组的数组,

因此你可能想要将子数组转换为对象:

你可以简单地使用以下方法:

foreach ($vouchers['vouchers'] as $key => $value) {
    $vouchers['vouchers'][$key] = (object) $value;
}

.. 或者使用集合:

$vouchers = collect($vouchers['vouchers'])->map(function ($voucher) {
    return (object) $voucher;
});

Laravel集合文档


6
要将一个数组转换为Illuminate\Database\Eloquent\Collection,您可以使用hydrate()方法与目标Eloquent模型一起使用,例如:
$eloquentCollection = TheEloquentModel::hydrate($arr);

1
这是因为数组有索引。 你可以像这样做:
@for ($i = 0; $i < count($vouchers); $i++)
    <p>{{$vouchers[$i]->name}}</p>
@endfor

更新

如果每个数组都包含另一个数组,你可以尝试使用以下方法:

@for ($i = 0; $i < count($vouchers); $i++)
    <p>{{$vouchers[$i][0]->name}}</p>
@endfor

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