调用未定义的方法 Illuminate\Database\Query\Builder::save()- Laravel 5

Call to undefined method Illuminate\Database\Query\Builder::save()- Laravel 5

我想不通。我认为它发生在我的 activateAccount 控制器函数上。在该函数中,我调用了保存用户的 account_activated 函数。另外,我得到了用户对象的第一个实例,所以我不知道出了什么问题。

这是控制器函数

public function activateAccount(Request $request, User $user, $key) {
    $registered = $request->session()->get('registered');
    if (isset($registered)) {
        $request->session()->forget('registered');
        if ($user->account_activated($key)) {
            // TODO 
            $referral = Referrals::where('activation_key', $key);
            if (!empty($referral)) {
                $referral->validate = 1;
                $referral->save();
            }


            return redirect('/login')->with('success', "Your account has been activated. You many login!");
        } else {
            return redirect('/not-active');
        }
    } else {
        return redirect('/');
    }
}

account_activated function inside the User model
    public function account_activated($key){
      $user = User::where('activate_key', $key)->first();
      $user->activate = 1;
      $user->save();
      return true;
    }   

这是错误消息

BadMethodCallException in Builder.php line 2047:
Call to undefined method Illuminate\Database\Query\Builder::save()
in Builder.php line 2047
at Builder->__call('save', array())
at Builder->save()
at call_user_func_array(array(object(Builder), 'save'), array()) in Builder.php line 943
at Builder->__call('save', array()) in RegisterController.php line 155
at Builder->save() in RegisterController.php line 155
at RegisterController->activateAccount(object(Request), object(User), 'OjkTKaLIVAaRhveYRZz9rC1uAuPjUc6fk4BeZhUM')
at call_user_func_array(array(object(RegisterController), 'activateAccount'), array(object(Request), object(User), 'key' => 'OjkTKaLIVAaRhveYRZz9rC1uAuPjUc6fk4BeZhUM')) in Controller.php line 256
at Controller->callAction('activateAccount', array(object(Request), object(User), 'key' => 'OjkTKaLIVAaRhveYRZz9rC1uAuPjUc6fk4BeZhUM')) in ControllerDispatcher.php line 164
at ControllerDispatcher->call(object(RegisterController), object(Route), 'activateAccount') in ControllerDispatcher.php line 112
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 114
at ControllerDispatcher->callWithinStack(object(RegisterController), object(Route), object(Request), 'activateAccount') in ControllerDispatcher.php line 69
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\RegisterController', 'activateAccount') in Route.php line 201
at Route->runWithCustomDispatcher(object(Request)) in Route.php line 134
at Route->run(object(Request)) in Router.php line 704
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Router.php line 706
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 671
at Router->dispatchToRoute(object(Request)) in Router.php line 631
at Router->dispatch(object(Request)) in Kernel.php line 236
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 139
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in VerifyCsrfToken.php line 50
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 122
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
at Kernel->handle(object(Request)) in index.php line 54

您遇到的错误不是来自您调用的函数,而是 activateAccount 函数本身。

特别是这里的这些行:

$referral = Referrals::where('activation_key', $key);
            if (!empty($referral)) {
                $referral->validate = 1;
                $referral->save();
            }

您需要在提供 where 子句后获取模型。看起来你已经知道如何做到这一点,但为了完整起见,你只需要添加一个 ->first():

$referral = Referrals::where('activation_key', $key)->first();
                if (!empty($referral)) {
                    $referral->validate = 1;
                    $referral->save();
                }