【问题标题】:Get array of json object and mapping to model class Laravel获取 json 对象数组并映射到模型类 Laravel
【发布时间】:2019-06-14 10:37:31
【问题描述】:

我打算将外部 api 的输出映射到模型中的对象属性。

例如data->x转Device->$attribute_x;,data->y转Device->$attribute_y;输出是对象数组。

我的预期结果是通过访问设备模型及其属性来提取每个对象,并在模型中进行一些操作。 (仅从 API 获取一次并在不同的函数中格式化)

有人可以就定义方法/类的方法给出一些指导吗?

这是我的外部 API 输出:

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

这是在 Laravel 中没有扩展 Eloquent 的模型,可以使用 guzzle 从外部 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(){

    }
}

【问题讨论】:

    标签: arrays json object model mapping


    【解决方案1】:

    我从头写代码,但你可以在设备中创建以下方法:

    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 对象的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多