【问题标题】:Trying to get property 'staff 'of non-object when test REST API from Postman从 Postman 测试 REST API 时尝试获取非对象的属性“员工”
【发布时间】:2020-06-24 03:10:54
【问题描述】:

我正在尝试了解邮递员在测试 API 时出现此错误消息的原因。

当我从邮递员测试我的 REST API 时,它给了我错误

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

我试图找出问题,但我找不到。我一直在寻找这个,但找不到一个能说明这一点的答案。

有人可以帮我解决这个问题吗?

谢谢!

这是我的代码 sn-p

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

    }

【问题讨论】:

  • 在您的 update 方法中,您将 1 传递给 $leave,但随后在您的 updatestatus 方法中,您尝试将 $leave 用作对象。

标签: php laravel api postman


【解决方案1】:

您的 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);

}

【讨论】:

  • 提供 1 是可选的。 OP忘记通过请假了。
【解决方案2】:

从我可以看到的上下文中,它正在尝试在以下位置引用 staff 变量:

$applying_staff = $leave->staff;

non-object 消息意味着$leave 本身就是问题所在。由于您将1 传递给调用:

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

1 变成了$leave 参数,这不是一个对象,因此会出现错误。

也许你认为通过传入 1,它会自动找到正确的模型?不是这种情况。您需要显式加载该模型。

【讨论】:

    猜你喜欢
    • 2017-08-10
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2021-02-26
    相关资源
    最近更新 更多