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

jac*_*ith 2 php laravel 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;
    }   
Run Code Online (Sandbox Code Playgroud)

这是错误消息

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
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 5

您获得的错误不是来自您调用的activateAccount函数,而是来自函数本身.

特别是这些线:

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

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

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