Я пытался обновить счет гандикапа, используя почтовый запрос. Но я, кажется, получаю сообщение об ошибке: создание объекта по умолчанию из пустого значения.

Код:

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

        }
    }

Если пользователь не существует в таблице гандикапов, то запускается код блока else и создается оценка гандикапа для пользователя, иначе блок if должен выполнить и обновить счет. Я пробовал много альтернатив, но, похоже, они не работают. Не знаю, что я делаю не так.

Я проверил переменные $ user, $ handicap, используя return. у этих переменных есть информация, которую мне нужно добавить в таблицу. Просто это не обновление.

0
Murlidhar Fichadia 10 Май 2016 в 15:54

2 ответа

Лучший ответ

Вероятно, ваша проблема связана с вашей линией Handicap::find($user->id). Очевидно, это null, потому что такая модель не была найдена, даже если ваш оператор if возвращает true.

В вашем операторе if у вас есть where('user_id' , '=', $user->id), но вы используете Handicap::find($user->id), который по сути является Handicap::where('id', '=', $user->id)->first().

Попробуйте изменить его на:

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

1
Ivanka Todorova 10 Май 2016 в 13:25

Вы можете попробовать:

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
Mihai Matei 10 Май 2016 в 13:30