首页 > 解决方案 > Laravel - 如何动态实现我的 API

问题描述

我正在使用 Guzzle 使用外部 API 并将其保存到数据库中:

use App\Employee;

public function handle()
{  
    $client = new GuzzleHttp\Client();
    $res = $client->request('GET','https://api.employees.net/allemployees');
    $clientdatas = json_decode($res->getBody()->getContents(), true);

   foreach($clientdatas as $clientdata)
    {
        $employee = HrEmployee::updateOrCreate([
            'employee_code' => $clientdata['staff_id'],
        ],
        [
            'first_name'                            => $clientdata['first_name'],
            'last_name'                             => $clientdata['last_name'],
            'other_name'                            => $clientdata['middle_name'],
            'dept_code'                            => $clientdata['department_id']
        ]);  
     }
  }

目前我所拥有的是,如果

'employee_code' => $clientdata['staff_id'],

存在,应该更新

        [
            'first_name'                            => $clientdata['first_name'],
            'last_name'                             => $clientdata['last_name'],
            'other_name'                            => $clientdata['middle_name'],
            'dept_code'                            => $clientdata['department_id']
        ]);  

它应该保存新记录。

但是,我想改变它,如果

'employee_code' => $clientdata['staff_id'],存在,应该更新

        [
            'first_name'                            => $clientdata['first_name'],
            'last_name'                             => $clientdata['last_name'],
            'other_name'                            => $clientdata['middle_name'],
        ]);  

除了

        [
           'dept_code'                            => $clientdata['department_id']
        ]);  

如果没有,它应该保存一切

我如何实现这一目标?

谢谢

标签: laravel

解决方案


根据以下内容创建有效负载$clientdata['staff_id']

$payloads = [
   'first_name' => $clientdata['first_name'],
   'last_name' => $clientdata['last_name'],
   'other_name' => $clientdata['middle_name']
];

if(!isset($clientdata['staff_id']) { // only add dept_code if staff_id is not set
   $payloads['dept_code'] = $clientdata['department_id'];
}

$employee = HrEmployee::updateOrCreate([
            'employee_code' => $clientdata['staff_id'],
        ], $payloads);


推荐阅读