【问题标题】:Laravel relations/subscription handlingLaravel 关系/订阅处理
【发布时间】:2017-03-15 23:30:15
【问题描述】:

您好,我对 Laravel 比较陌生,正在尝试创建订阅检查器。请不要建议收银员,因为付款将使用比特币等替代方式。

我有两个模型,用户模型和订阅模型。

在用户模型中,我有方法订阅,它返回用户拥有一个订阅的关系。

public function subscription()
{
  return $this->hasOne(Subscription::Class);
}

在订阅模型中,我有一个 User 方法,它返回订阅属于用户的关系

public function user()
{
  return $this->belongsTo(User::Class);
}

我现在想在我的刀片模板中返回一个状态,无论当前日期是否超过订阅表中的结束日期。我在订阅模型中创建了一个 isSubscribed 方法来返回当前日期是否超过结束日期。

public function isSubscribed()
{
  $now = Carbon::now();

  if ($now->gt($this->enddate))
  {
    return false;
  }

  return true;
}

在刀片模板中,我根据用户订阅方法返回 true 或 false 来显示数据

            @if(Auth::user()->subscription->isSubscribed())
              You're subscribed
            @else
              You're not subscribed
            @endif

我现在遇到的问题是,如果订阅中的用户不存在记录,则会引发

的错误

在 null 上调用成员函数 isSubscribed()

如果订阅模型中的用户不存在任何记录,有没有办法返回 false 或者我这样做完全错误?

抱歉,如果这是一个令人难以置信的简单答案,但我已经搜索了文档并且似乎找不到任何东西。

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    你可以检查一个集合是否为空

    所以Auth::user()->subscription->isEmpty()

    如果当前用户没有订阅,则返回 true。

    https://laravel.com/docs/5.3/collections#method-isempty

    【讨论】:

    • 这也不起作用,它只会抛出以下错误Call to undefined method Illuminate\Database\Query\Builder::isEmpty(),如果我这样做Auth::user()->subscription->isEmpty(),它会再次抛出空错误
    • 您在哪个页面上显示这个?,我假设您在查看该页面时需要登录,因为如果您可以以访客身份查看该页面,显然无法使用
    • 在Auth中间件下,需要登录才能查看。如果我在用户的订阅表中有一条记录,它不会抛出错误,它只会在表中没有订阅时抛出错误。
    猜你喜欢
    • 2022-01-26
    • 2012-09-07
    • 2022-01-26
    • 1970-01-01
    • 2015-10-02
    • 2021-02-27
    • 2011-12-19
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多