Попытка получить свойство 'staff' необъекта при тестировании REST API от Postman - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь понять причину этого сообщения об ошибке от почтальона при тестировании API.

Когда я тестирую свой REST API от почтальона, он выдает ошибку

ErrorException (E_NOTICE)
Trying to get property 'staff' of non-object

Я пытаюсь найти проблему, но не могу ее найти. Я продолжал искать это, но не мог найти ответ, который прояснит это.

Кто-нибудь может мне помочь в этом?

Спасибо!

Это мой фрагмент кода

public function updatestatus($request, $leave, $is_api=0)
    {

        $status = $request->get('status');

        $user = $is_api? JWTAuth::parseToken()->authenticate():Auth::user();
        // $user = Auth::user();
        $staff= $user->ref_user;

        $applying_staff = $leave->staff;
        $applying_user = $applying_staff->main_user;

        //Approved
        if($status==2 && $leave->status==1)
        {
            $leave->status =2;
            $leave->approved_by_staff_id = $staff->staff_id;
            $leave->approved_date = new Carbon('today');
            $leave->save();

            if($user->centre_id)
                Helper::ClearObjective(10,$user->centre_id);

            dispatch(new EmailJob($applying_user->email,new LeaveNotification(route('staff.leave.show',$leave->id), $leave->statusStr)))
                ->onConnection('database')
                ->onQueue('emails');

            return response()->json(['Success'=>'Success']);

            //send email
        }
        // Rejected
        else if($status==3 && $leave->status==1)
        {
            $leave->status =3;
            $leave->status_rejected_reason = $request->get('reason',null);
            $leave->save();
            if($user->centre_id)
                Helper::ClearObjective(10,$user->centre_id);

            $leave_cat = LeaveCategory::find($leave->leave_type);
            if($leave_cat->leave_status!=0)
            {
                $leave_ent = $applying_staff->leaves()->where('leave_type',$leave->leave_type)->first();
                if($leave_ent)
                {
                    $leave_ent->leave_remaining += $leave->leave_days;
                    $leave_ent->save();
                }
            }

            dispatch(new EmailJob($applying_user->email,new LeaveNotification(route('staff.leave.show',$leave->id), $leave->statusStr, $leave->status_rejected_reason)))
                ->onConnection('database')
                ->onQueue('emails');

            //send email


        }
        //Cancelled
        else if(($status==4 && $leave->status==2) || ($status==4 && $leave->staff_id == $staff->staff_id))
        {
            $leave->status =4;
            $leave->status_rejected_reason = $request->get('reason',null);
            $leave->save();

            $leave_cat = LeaveCategory::find($leave->leave_type);
            if($leave_cat->leave_status!=0)
            {
                $leave_ent = $applying_staff->leaves()->where('leave_type',$leave->leave_type)->first();
                if($leave_ent)
                {
                    $leave_ent->leave_remaining += $leave->leave_days;
                    $leave_ent->save();
                }
            }


            dispatch(new EmailJob($applying_user->email,new LeaveNotification(route('staff.leave.show',$leave->id), $leave->statusStr,$leave->status_rejected_reason)))
                ->onConnection('database')
                ->onQueue('emails');

            //send email

        }

        // return reponse()->toJson(compact('leave'));

        return $leave;


    }

API вызовов

 public function update(Request $request)
    {
        return $this->leaveApplicationRepository->updatestatus($request,1);

    }

Ответы [ 2 ]

1 голос
/ 12 марта 2020

вашему updatestatus () нужно 3 параметра и ваша функция update () передает только 2 параметра;

public function update(Request $request)
{
    // please provide you leave data
    $leave = "your data is here";
    return $this->leaveApplicationRepository->updatestatus($request,$leave, 1);

}

0 голосов
/ 12 марта 2020

Из контекста, который я вижу, он пытается сослаться на переменную staff в:

$applying_staff = $leave->staff;

Сообщение non-object будет означать, что $leave сама проблема. Поскольку вы передаете 1 вызову:

return $this->leaveApplicationRepository->updatestatus($request,1);

, 1 становится параметром $leave, и это не объект, следовательно ошибка.

Может быть Вы думаете, что, пройдя в 1, он найдет правильную модель автоматически? Это не вариант. Вам нужно явно загрузить эту модель.

...