【问题标题】:Laravel Cashier Call to Undefined Method onGracePeriod()Laravel Cashier 调用未定义的方法 onGracePeriod()
【发布时间】:2017-03-08 17:01:26
【问题描述】:

所以我最近从 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;

以及类本身内部的use语句

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”,因为它似乎不再被使用,我需要用什么来替换它吗?谢谢!

【问题讨论】:

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


    【解决方案1】:

    我相信你必须直接引用他们的订阅文章——而不是直接从用户那里引用(我认为它被错误地使用了就是我的意思);

    根据the documentation,您可以像这样检查 onGracePeriod:

    if ($user->subscription('main')->onGracePeriod()) {
        //
    }
    

    【讨论】:

    • 有趣,所以我的订阅设置方式直接在用户身上(我没有任何类型的数据透视表将订阅映射到用户)。我的订阅表只是订阅的定义,然后用户在他们的表中有相应的 ID。所以从历史上看,我一直能够调用像 onGracePeriod 这样的东西,你知道什么时候改变了吗?
    • 我不是 100% 确定 - 我最近开始自己摆弄 Cashier,我注意到几乎所有教程都已过时,并且它们的命令不起作用。我想说的是,在 v.6 或 v.7 左右的某个地方,事情确实发生了变化(包括数据库结构!)。这让我不得不盲目地寻找自己的方式变得非常棘手,但我肯定遇到了与您在这里面临的类似问题,因为它与网络上的所有教程/视频/解释相反!
    • 进一步查看后 - 似乎在 5.1 和 5.2 之间是该特定方法 (onGracePeriod) 更改为当前形式的时间。
    • 完美,谢谢汉尼。我将更新我的代码和/或我的结构并对其进行排序。
    • 太棒了。我相信这是公认的答案,因此,如果您愿意,请将其标记为这样,以便其他人在将来遇到此问题时可能会发现此问题(就像您和我现在所做的一样!)
    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 2022-06-15
    • 2013-10-23
    • 1970-01-01
    • 2015-05-31
    • 2016-06-05
    • 2016-09-03
    • 2015-06-10
    相关资源
    最近更新 更多