Laravel 5.1 и Cashier не взаимодействуют с $ user, как ожидалось

Когда я регистрирую нового пользователя, методы Кассира прекрасно работают, чтобы зарегистрировать этого пользователя. Например, у меня есть это в моей модели пользователя:

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

У меня также есть метод «повторной подписки» в моей модели User, который использует аналогичные методы 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 :: everSubscribeed ()».

Если я удалю это условие, я получу следующую ошибку: «FatalErrorException в строке 124 User.php: вызов неопределенного метода stdClass :: subscription ()»

Если я заменю эти строки кода:

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

с этим:

$user = new User;

Тогда я не получаю ошибок, но, конечно, я не хочу создавать нового пользователя, я хочу повторно подписать моего старого пользователя. У меня это работало нормально в Laravel 4.2 с почти идентичным кодом. Спасибо за любую помощь!

1

Решение

Вам нужно использовать Eloquent вместо Query Builder:

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

Построитель запросов DB::table('users')->where('email', '=', $email)->first() возвращает stdClass объект, а не экземпляр вашей модели пользователя.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]