Laravel - 将数组转换为 eloquent 集合

Ale*_*Per 3 php arrays collections laravel eloquent

我需要使用来自 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'));


}
Run Code Online (Sandbox Code Playgroud)

dd($vouchers)回复我:

在此处输入图片说明

现在,当我尝试将 $vouchers 数组与刀片引擎一起使用时,例如:

<body>
              @foreach ($vouchers as $v)
                <p>{{$v->name}}</p>
              @endforeach
          </body>
Run Code Online (Sandbox Code Playgroud)

我有错误:

"Trying to get property 'name' of non-object (View: .... etc...
Run Code Online (Sandbox Code Playgroud)

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

小智 10

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

因此,您可能希望将子数组转换为对象:

您可以简单地使用:

foreach ($vouchers['vouchers'] as $key => $value) {
    $vouchers['vouchers'][$key] = (object) $value;
}
Run Code Online (Sandbox Code Playgroud)

.. 或使用集合:

$vouchers = collect($vouchers['vouchers'])->map(function ($voucher) {
    return (object) $voucher;
});
Run Code Online (Sandbox Code Playgroud)

Laravel 集合文档


Ori*_*ici 6

要将数组转换为 a,Illuminate\Database\Eloquent\Collection您可以使用hydrate()目标Eloquent model的方法,例如:

$eloquentCollection = TheEloquentModel::hydrate($arr);
Run Code Online (Sandbox Code Playgroud)