Laravel хранит API данных JSON в базе данных

#laravel #api #rest #laravel-8

Вопрос:

Я получил данные json из API и хочу сохранить их в своей базе данных.

образец json данных :

 {
    "success": true,
    "data": [
        {
            "status_employee_id": "1",
            "name": "Manager"
        },
        {
            "status_employee_id": "2",
            "name": "Staff"
        },
        {
            "status_employee_id": "3",
            "name": "OB"
        },
        {
            "status_employee_id": "4",
            "name": "Fired"
        },
        {
            "status_employee_id": "5",
            "name": "Retired"
        }
    ]
}
 

Моя модель

 class StatusEmployee extends Model
{
    use HasFactory;
    protected $table = 'status_employee';
    protected $fillable = [
       'status_employee_id','name'
    ];
    public $timestamps = false;

}
 

Я пробовал использовать это в своем контроллере

 public function store()
    {
        $client = new GuzzleHttpClient();
        $res = $client->request('GET', 'http://xx.xx.xx.xx/tools/public/get_status_employee');
        $datas = json_decode($res->getBody(), true);
        foreach($datas as $data){
            StatusEmployee::create([
                'status_employee_id' => $data->status_employee_id,
                'name' => $data->name,
            ]);
        }


    }
 

И я хочу сохранить образец json данных в моей таблице status_employee. Как это сделать?

Комментарии:

1. что вы пробовали до сих пор ? в чем заключается вопрос?

Ответ №1:

Это просто, Laravel Eloquent сделает все за вас.

 // If json is in string decode first
$data = json_decode($res->getBody(), true); // to array

// Eloquent approach
StatusEmployee::insert(@$data['data']); 
 

Ответ №2:

Я предполагаю, что вы используете Laravel, так как вы упомянули Laravel в своих тегах.

     DB::table('status_employee')->insert(json_decode($res->getBody(),true)['data']);
 

Комментарии:

1. Я добавил более подробную информацию о контроллере в свой вопрос