Получить массив объекта json и сопоставление с классом модели Laravel - PullRequest
0 голосов
/ 21 января 2019

Я намереваюсь отобразить вывод из внешнего API в атрибут объекта в модели.

Например, data-> x to Device -> $ attribute_x ;, data-> y to Device -> $ attribute_y;На выходе получается массив объектов.

Мой ожидаемый результат - извлечь каждый объект путем доступа к модели устройства и его атрибутам и выполнить некоторые манипуляции в модели.(получить один раз только из API и отформатировать его в другой функции)

Может ли кто-нибудь дать какое-то руководство по определению методов / классов для достижения?

Это мой вывод из внешнего API:

{
    "data": [
        {
            "x": "1",
            "y": "2"
        },
        {
            "x": "11",
            "y": "22"
        }
    ]
}

Это модель без расширения Eloquent в Laravel для извлечения всех данных из внешнего API с помощью жадности.

namespace App;

$client = new \GuzzleHttp\Client([
   'base_uri' => 'https://xxxx.com',
   'headers' => [
   'content_type' => 'application/json',
   'accept' => 'application/json'
   ]]);

$response = $client->get('units');
$data = json_decode($response->getBody());



class Devices
{
    protected $attribute_x;
    protected $attribute_y;

    public static function all(){

    }
}

1 Ответ

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

Я пишу код из головы, но вы можете создать в Устройствах следующий метод:

public static function importFromAPI($data) {

    $result = [];

    foreach($data as $item) {
        $dev = new Device;
        $dev->attribute_x = $item['x'];
        $dev->attribute_y = $item['y'];
        $result[] = $dev;
    }

    return $result;
}

И использовать его для импорта списка устройств из массива данных из API json

$devices = Devices::importFromAPI($data);

ВашDevice может расширять класс eloquent Model, чтобы иметь легкий доступ к БД.Вышеуказанный метод также может быть реализован в отдельном классе, например ApiService, и может быть переименован в importDevicesFromAPI и содержит код для загрузки json и сопоставления его с объектами Device.

...