2015-08-08 2 views
1

Когда я регистрирую нового пользователя, методы 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(); 
    } 
} 

и я получаю следующее сообщение об ошибке: «Вызовите undefined метод stdClass :: everSubscribed()».

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

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

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

с этим:

$user = new User; 

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

ответ

1

Вы должны использовать красноречивый вместо Query Builder:

$ пользователя = User :: где ('электронная почта', '=', $ электронная почта) -> первый();

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

+1

Спасибо, @Ben. – user3089840