Вызов кассира Laravel для неопределенного метода onGracePeriod()

Итак, я недавно обновился с Laravel 5.1 -> 5.4 и Cashier с 5.0 -> 7.0. В моем лезвии я использую эту проверку, чтобы увидеть, находится ли пользователь в льготном периоде.

<?php if(Auth::check() && Auth::user()->onGracePeriod()): ?>

Однако теперь этот код выдает исключение

Call to undefined method Illuminate\Database\Query\Builder::onGracePeriod()

Согласно документации, моя пользовательская модель имеет импорт

use Laravel\Cashier\Billable;

и оператор использования внутри самого класса

class User extends Model implements AuthenticatableContract, 

CanResetPasswordContract
{
     use Authenticatable, CanResetPassword, Billable;
    /**
     * The database table used by the model.
     *
     * @var string
...

Есть ли что-то еще, что может вызвать эту ошибку? Поиск по коду выглядит так, как будто функция находится в Subscription.php в кассе, но я не могу найти исправление. У меня также есть включенные даты, которые часто упоминаются в документации.

protected $dates = ['trial_ends_at', 'subscription_ends_at'];

Но у меня было это, и моя БД использовала это до версии 5.1, поэтому я сомневаюсь, что это связано. Любые идеи? Единственное, о чем я могу думать, это то, что при переходе с 5.1 -> 5.4 мне пришлось удалить «BillableContract», так как кажется, что он больше не используется, есть ли что-то, на что я должен его заменить? Спасибо!


person CMOS    schedule 08.03.2017    source источник


Ответы (1)


Я считаю, что вы должны напрямую ссылаться на их часть подписки, а не напрямую от пользователя (я думаю, что это неправильно, это то, что я говорю);

Согласно документации, вы проверяете onGracePeriod следующим образом:

if ($user->subscription('main')->onGracePeriod()) {
    //
}
person Hanny    schedule 08.03.2017
comment
Интересно, что я настраиваю свои подписки непосредственно для пользователя (у меня нет какой-либо сводной таблицы, которая сопоставляет подписки с пользователями). Моя таблица подписок - это просто определение подписок, а затем у пользователя есть соответствующий идентификатор в своей таблице. Итак, исторически я мог вызывать такие вещи, как onGracePeriod, вы знаете, когда это изменилось? - person CMOS; 08.03.2017
comment
Я не уверен на 100% - недавно я сам начал возиться с Cashier и заметил, что практически все туториалы устарели, а их команды не работают. Я хочу сказать, что где-то в v.6 или v.7 все определенно изменилось (включая структуру БД!). Это усложнило мне поиск пути вслепую, но я определенно наткнулся на аналогичную проблему, с которой вы столкнулись здесь, потому что это противоречит всем учебникам/видео/объяснениям в Интернете! - person Hanny; 08.03.2017
comment
После дальнейшего изучения выясняется, что между 5.1 и 5.2 этот конкретный метод (onGracePeriod) изменился, чтобы быть в его текущей форме. - person Hanny; 08.03.2017
comment
Отлично, спасибо, Ханни. Я обновлю свой код и/или свою структуру и приведу ее в порядок. - person CMOS; 08.03.2017
comment
Потрясающий. Я считаю, что это принятый ответ, поэтому, если вы чувствуете, что готовы к этому, отметьте его как таковой, чтобы другие могли найти это в будущем, если они наткнутся на него (как и вы, и я сейчас сделали!) - person Hanny; 08.03.2017