Laravel 5.1和Cashier没有按预期与$ user交互

时间:2015-08-08 03:24:21

标签: php laravel laravel-5 laravel-5.1 laravel-cashier

当我注册新用户时,Cashier的方法可以正常注册该用户。例如,我在我的用户模型中有这个:

public static function registerUser()
{
$user = new User;
$stripeToken = Input::get('stripeToken');
$user->subscription('yearly')->create($stripeToken);
$user->save();
}

我还有一个"重新订阅"我的用户模型中使用类似收银方法的方法:

public static function resubscribe(){
    $email = Input::get('email');
    $user = DB::table('users')->where('email', '=', $email)->first();
    if ($user->everSubscribed()) {
        $credentials = Input::only(['email', 'password']);
        $stripeToken = Input::get('stripeToken');
        $user->subscription('monthly')->resume($stripeToken);
        $user->save(); 
     }
}

我收到以下错误:"调用未定义的方法stdClass :: everSubscribed()"。

如果删除该条件,我会收到以下错误:" User.php第124行中的FatalErrorException:调用未定义的方法stdClass :: subscription()"

如果我替换这些代码行:

$email = Input::get('email');
$user = DB::table('users')->where('email', '=', $email)->first();

用这个:

$user = new User;

然后我没有错误,但当然,我不想创建新用户,我想重新订阅我的旧用户。我在Laravel 4.2中使用了几乎完全相同的代码。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您需要使用Eloquent而不是Query Builder:

$ user = User :: where(' email',' =',$ email) - > first();

查询构建器DB::table('users')->where('email', '=', $email)->first()返回stdClass对象,而不是用户模型的实例。