2017-12-14 6 views
1

Ich habe den folgenden Code verwendet, um mehrmals in den DB einzufügen, aber zufällig gibt es mir die Fehler Ausnahme für den Versuch, die Eigenschaft von Nicht-Objekt zu erhalten. Manchmal erkennt es auch nicht $ test-> data [] (durch den Fehler [ErrorException] Undefinierte Eigenschaft: stdClass :: $ data) Ich verstehe die meisten Antworten auf diese Fragen haben vorgeschlagen, $ test ['verwenden Daten '], aber wie Sie sehen können, hat mein Antworttext mehrere Arrays innerhalb eines Arrays und ich muss auf sehr spezifische Werte zugreifen.Versuch, Eigenschaft von Nicht-Objekt zu bekommen - Laravel-5.5 Einfügen in db

for($j=1;$j<50;$j++) 
    {  
     sleep(30); 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, "specified URL"); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json')); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
     curl_setopt($ch, CURLOPT_HEADER, FALSE); 
     curl_setopt($ch, CURLOPT_HTTPGET, TRUE); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
     $response = curl_exec($ch); 
     curl_close($ch); 

     $test=json_decode($response,true); 

     $size=count($test['data']); 

     for($i=0;$i<$size;$i++) 
     { 

     $start_date=date_create($test->data[$i]->opportunity->earliest_start_date); 
     $end_date=date_create($test->data[$i]->opportunity->latest_end_date); 
     $app_close_date=date_create($test->data[$i]->opportunity->applications_close_date); 
     $date_approved=date_create($test->data[$i]->date_approved); 
     $date_realized=date_create($test->data[$i]->date_realized); 
     $experience_start_date=date_create($test->data[$i]->experience_start_date); 
     $experience_end_date=date_create($test->data[$i]->experience_end_date); 
     $signup_date=date_create($test->data[$i]->created_at); 

     DB::insert('insert ignore into Opportunity (opportunity_id,opportunity_location,office_id,programme_name,title,earliest_start_date,latest_end_date,applications_close_date) values (?, ?, ?, ?,?, ?, ?, ?)', [$test->data[$i]->opportunity->id,$test->data[$i]->opportunity->location, $test->data[$i]->opportunity->office->id, $test->data[$i]->opportunity->programmes->short_name,$test->data[$i]->opportunity->title,date_format($start_date,"Y-m-d H:i:s"),date_format($end_date,"Y-m-d H:i:s"),date_format($app_close_date,"Y-m-d H:i:s")]); 
     DB::insert('insert ignore into Home_LC (id, country, name) values (?, ?, ?)', [$test->data[$i]->person->home_lc->id,$test->data[$i]->person->home_lc->country,$test->data[$i]->person->home_lc->name]); 
     DB::insert('insert ignore into Applications (app_id,ep_id,opportunity_id,date_approved,date_realized,experience_start_date,experience_end_date) values (?,?,?,?,?,?,?)', [$test->data[$i]->id,$test->data[$i]->person->id,$test->data[$i]->opportunity->id,date_format($date_approved,"Y-m-d H:i:s"),date_format($date_realized,"Y-m-d H:i:s"),date_format($experience_start_date,"Y-m-d H:i:s"),date_format($experience_end_date,"Y-m-d H:i:s")]); 
     DB::insert('insert ignore into ep_users (ep_id,first_name,last_name,email,home_lc_id,signup_date,dob,status) values (?, ?,?, ?,?, ?,?, ?)', [$test->data[$i]->person->id,$test->data[$i]->person->first_name,$test->data[$i]->person->last_name,$test->data[$i]->person->email,$test->data[$i]->person->home_lc->id,date_format($signup_date,"Y-m-d H:i:s"),$test->data[$i]->person->dob,$test->data[$i]->status]); 


     } 

    } 

oben Angegeben ist der Code, der eine JSON-Datei abruft und dann json_decode Verwendung gibt es eine Antwort wie folgt aus:

array:3 
[ 
    "paging" => array:3 
[ 
    "total_items" => 216822 
    "current_page" => 1 
    "total_pages" => 1085 
    ] 
    "data" => array:200 [ 
    0 => array:19 [ 
     "id" => 3719730 
     "url" => "" 
     "status" => "open" 
     "current_status" => "open" 
     "an_signed_at" => null 
     "nps_grade" => null 
     "date_realized" => null 
     "date_approved" => null 
     "custom_status" => null 
     "experience_start_date" => null 
     "experience_end_date" => null 
     "favourite" => null 
     "person" => array:23 [ …23] 
     "opportunity" => array:15 [ …15] 
     "standards" => [] 
     "scheduled_interview" => null 
     "permissions" => array:26 [ …26] 
     "created_at" => "2017-12-14T10:27:06Z" 
     "updated_at" => "2017-12-14T10:27:06Z" 
    ] 
.... 
    198 => array:19 [ …19] 
    199 => array:19 [ …19] 
    ] 
    "facets" => null 
] 

Antwort

0

$test=json_decode($response,true); geändert zu $test=json_decode($response); und $size=count($test['data']) zu $size=count($test->data)

Wenn json_decode ($ variable, wahr) wird verwendet, zurückgegebene Objekte werden in assoziative Arrays umgewandelt.

0

Dies liegt daran, $test Array und nicht widersprechen.

alle Vorkommen ersetzen:

$test->data 

in

$test['data'] 
+0

Ja, aber wie ich bereits erwähnt habe, hilft es nicht mit einer Aussage wie '$ test-> data [$ i] -> opportunity-> frühest_start_date'' $ test ['data'] [' Gelegenheit '] [' frühester_Start_Datum '] ' – Tano

Verwandte Themen