Skip to content
Advertisement

Update Laravel Database table with cURL Get Response

I am trying to execute a cURL GET request and use the response to update my table, but getting the following error:

TypeError IlluminateDatabaseEloquentBuilder::create(): Argument #1 ($attributes) must be of type array, string given, called in /home/vagrant/code/bp/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php on line 23

A similar GET request through Postman returns the following response structure:

{
    "results": [
        {
            "transaction": "List",
            "records": [
                {
                    "CONO": "100",
                    "LNCD": "EN",
                    "CUNO": "000040",
                    "CUNM": "Custonmer Name",
                    "CUA1": "1234 Test Road",
                    "CUA2": "Alaska",
                    "CUA3": "USA",
                    "CUA4": "Test",
                   
                },

Controller: M3customCrudController.php

class M3ImportController extends CrudController {

public function fetchcust() {

             
    $url = "https://abc123.com";
    

    //will be as an admin field in official version
    $username = 'xxx';
    $password = 'yyy';

    //Curl
    $curl = curl_init($url);

    curl_setopt($curl, CURLOPT_HEADER, FALSE);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($curl, CURLOPT_MAXREDIRS, 3);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_USERAGENT, 'SP connector');
    curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password);
  
    $response = curl_exec($curl);    
    $info = curl_getinfo($curl);

    $response = [
    'headers' => substr($response, 0, $info["header_size"]),
    'body' => substr($response, $info["header_size"]),
    ];

   $mydata = $response['body'];
    
    M3custom::create($mydata);

    }

}

Advertisement

Answer

First – use Http facade, not curl.

Second – you get json (string) and not converting it in array.

Third – your model structure is same as response? I don’t think so.

Code may be like this, but it may be necessary to convert to fit the structure of the model

public function fetchcust() {
    $url = "https://abc123.com";
    //will be as an admin field in official version
    $username = 'xxx';
    $password = 'yyy';
    $response = Http::withBasicAuth($username, $password)
        ->withUserAgent('SP connector')
        ->get($url)
        ->json('results.records');
    M3custom::create($response);
}
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement