【问题标题】:Laravel 5.1 and Cashier not interacting with $user as expectedLaravel 5.1 和 Cashier 未按预期与 $user 交互
【发布时间】:2015-10-31 13:58:04
【问题描述】:

当我注册一个新用户时,Cashier 的方法可以很好地注册该用户。例如,我的用户模型中有这个:

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

我的用户模型中还有一个“重新订阅”方法,它使用类似的 Cashier 方法:

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()”。

如果我删除该条件,我会收到以下错误:“FatalErrorException in User.php line 124: Call to undefined method stdClass::subscription()”

如果我替换这些代码行:

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

用这个:

$user = new User;

然后我没有收到任何错误,但是当然,我不想创建新用户,我想重新订阅我的旧用户。我在 Laravel 4.2 中使用几乎相同的代码正常工作。感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-18
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 2017-02-15
      • 2022-06-15
      • 2016-04-15
      相关资源
      最近更新 更多