Laravel 5.1 和 Cashier 没有按预期与 $user 交互
Laravel 5.1 and Cashier not interacting with $user as expected
当我注册一个新用户时,Cashier 的方法可以很好地注册该用户。例如,我的用户模型中有这个:
public static function registerUser()
{
$user = new User;
$stripeToken = Input::get('stripeToken');
$user->subscription('yearly')->create($stripeToken);
$user->save();
}
我的 User 模型中也有一个 "resubscribe" 方法,它使用类似的 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();
}
}
我收到以下错误:"Call to undefined method 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 中使用几乎相同的代码运行良好。感谢您的帮助!
您需要使用 Eloquent 而不是查询生成器:
$user = User::where('email', '=', $email)->first();
查询生成器 DB::table('users')->where('email', '=', $email)->first()
returns 一个 stdClass
对象而不是您的用户模型的一个实例。
当我注册一个新用户时,Cashier 的方法可以很好地注册该用户。例如,我的用户模型中有这个:
public static function registerUser()
{
$user = new User;
$stripeToken = Input::get('stripeToken');
$user->subscription('yearly')->create($stripeToken);
$user->save();
}
我的 User 模型中也有一个 "resubscribe" 方法,它使用类似的 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();
}
}
我收到以下错误:"Call to undefined method 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 中使用几乎相同的代码运行良好。感谢您的帮助!
您需要使用 Eloquent 而不是查询生成器:
$user = User::where('email', '=', $email)->first();
查询生成器 DB::table('users')->where('email', '=', $email)->first()
returns 一个 stdClass
对象而不是您的用户模型的一个实例。