2016-05-10 8 views
0

投稿要求を使用してハンディキャップスコアを更新しようとしています。しかし、私はエラー:空の値からデフォルトのオブジェクトを作成しているようだ。apiコールを使用してlaravelの値を更新する

コード:

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); 
      } 

     } 
    } 

ユーザーが他のブロックのコードが実行されるハンディキャップテーブルに存在し、他のユーザーのためのハンディキャップスコアを作成していない場合は、ブロックが実行され、スコアを更新する必要がある場合。私は多くの選択肢を試しましたが、動かすことはできません。何が間違っているのか分かりません。

returnを使って$ user、$ handicap変数を調べました。これらの変数には、テーブルに追加する必要がある情報があります。そのちょうどそれは更新していません。

答えて

1

はあなたの問題は、おそらくあなたはHandicap::find($user->id)を持っている行から来ています。 if文がtrueを返しても、そのモデルが見つからなかったので、明らかにnullです。

ifステートメントにはwhere('user_id' , '=', $user->id)がありますが、Handicap::find($user->id)は基本的にHandicap::where('id', '=', $user->id)->first()です。

にそれを変更してみてください:

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

+0

ありがとうございます! –

0

あなたはこれを試してみることがあります。

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

は '$要求 - > handicap'' $要求 - >入力( 'ハンデ')の省略形 'または単に誤植ですか? –

+1

これはtypoではありません。要求入力はすべてクラス・プロパティーとしてアクセスできます –

+0

SQLSTATE [23000]:整合性制約違反:1452子行を追加または更新できません:外部キー制約は失敗します( 'usg' CONTIRAINT 'handicaps_user_id_foreign' FOREIGN KEY(' user_id')REFERENCES 'users'(' id')ON DELETE CASCADE)(SQL:ハンディキャップ(handicap)値に挿入してください) –

関連する問題