2016-05-10 14 views
0

Ich habe versucht, die Handicap-Score mit einer Post-Anfrage zu aktualisieren. Es scheint jedoch ein Fehler zu sein, der besagt: Erstellen eines Standardobjekts aus einem leeren Wert.Aktualisierung Wert in Laravel mit API Anruf

Code:

public function handicap(Request $request) 
    { 
     $user = Auth::user(); 

     $rules = array(
      'handicap'   => 'required' 
     ); 
     $validator = Validator::make(Input::all(), $rules); 

     // process the login 
     if ($validator->fails()) 
     { 
      return response()->json(['msg' => 'Failed to update Handicap score!'], 200); 
     } 
     else { 

      if(Handicap::where('user_id', '=', $user->id)->exists()) 
      { 
       $handicap     = Handicap::find($user->id); 
       $handicap->user_id  = $user->id; 
       $handicap->handicap  = $request->input('handicap'); 
       $handicap->save(); 
       return response()->json(['msg' => 'You have successfully updated your handicap score!'], 200); 
      } 
      else 
      { 
       $handicap = new Handicap; 
       $handicap->user_id  = $user->id; 
       $handicap->handicap  = $request->input('handicap'); 
       $handicap->save(); 
       return response()->json(['msg' => 'You have added your handicap score successfully!'], 200); 
      } 

     } 
    } 

Wenn Benutzer existiert nicht in Handicap-Tabelle dann die anderen Blockcode läuft und erstellt eine Handicap-Score für den Benutzer sonst die if-Block muss die Partitur auszuführen und zu aktualisieren. Ich habe viele Alternativen ausprobiert, aber es scheint nicht zu funktionieren. Weiß nicht was ich falsch mache.

Ich überprüfte die Variablen $ user, $ handicap using return. Diese Variablen haben die Informationen, die ich zur Tabelle hinzufügen muss. Es ist nur, dass es nicht aktualisiert.

Antwort

1

Ihr Problem wahrscheinlich von der Linie, die Sie Handicap::find($user->id) haben kommt. Offensichtlich ist es null, weil ein solches Modell nicht gefunden wurde, obwohl Ihre if-Anweisung true zurückgibt.

In Ihrem if Aussage haben Sie where('user_id' , '=', $user->id), aber Sie verwenden Handicap::find($user->id) die im Grunde Handicap::where('id', '=', $user->id)->first() ist.

Versuchen Sie es zu ändern:

$handicap = Handicap::where('users_id', '=', $user->id)->first();

+0

Danke, dass es funktioniert !! –

0

Sie können dies einen Versuch geben:

public function handicap(Request $request) 
{ 
    $validator = Validator::make(Input::all(), [ 
     'handicap' => 'required' 
    ]); 

    // process the login 
    if ($validator->fails()) { 
     return response()->json(['msg' => 'Failed to update Handicap score!'], 200); 
    } 

    $handicap = Handicap::firstOrNew([ 
     'user_id' => $request->user()->id; 
    ]); 
    $handicap->user_id = $request->user()->id; 
    $handicap->handicap = $request->handicap; 
    $handicap->save(); 

    return response()->json(['msg' => 'You have successfully updated your handicap score!'], 200); 
} 
+0

Ist '$ request-> handicap' eine Abkürzung für' $ request-> Eingang ('Handicap') 'oder einfach nur ein Tippfehler? –

+1

Es ist kein Tippfehler ... auf alle Anfrageeingaben kann als Klasseneigenschaften zugegriffen werden –

+0

Ich erhalte diesen Fehler: SQLSTATE [23000]: Integritätseinschränkungsverletzung: 1452 Hinzufügen oder Aktualisieren einer untergeordneten Zeile nicht möglich: eine Fremdschlüsseleinschränkung schlägt fehl ('usg' .'handicaps', CONSTRAINT 'handicaps_user_id_foreign' FREMDSCHLÜSSEL (' user_id') REFERENZEN 'users' (' id') ON DELETE CASCADE (SQL: Einfügen in 'handicaps' (' handicap') Werte (66)) –