Laravel - конвертировать массив в красноречивую коллекцию - PullRequest
0 голосов
/ 04 января 2019

Мне нужно использовать данные из 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

Теперь, когда я пытаюсь использовать массив $ vouchers с блейд-движком, например:

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

Я получил ошибку:

"Trying to get property 'name' of non-object (View: .... etc...

Как я могу преобразовать массив в красноречивую коллекцию. Я использую последнюю версию Laravel 5.7

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Это потому, что массивы имеют индекс. Вы можете сделать что-то вроде этого:

@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
0 голосов
/ 04 января 2019

На самом деле ваш $vouchers является массивом массивов,

Так что вы можете преобразовать ваши подмассивы в объекты:

Вы можете сделать это просто используя:

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

.. или используя коллекции:

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

Документация по коллекциям Laravel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...