Laravel Cashier在新创建的订阅中返回false

时间:2017-08-07 03:52:47

标签: php laravel

我正在使用Laravel 5.4和cashier 7.0创建新订阅,但在创建订阅后,我尝试从Billable特征返回一些值,但它们返回false。例如:

public function persist(Company $company)
{
    $company->newSubscription('default', $this->input('plan'))->create($this->input('token'));

    return response()->json([
        'subscribed' => $company->subscribed(),
        'onTrial'    => $company->onTrial()
    ]);
}

即使模型已订阅且两个属性都应返回true,'subscribed''onTrial'都是假的。如何在创建订阅后立即在控制器上访问收银员方法?

2 个答案:

答案 0 :(得分:0)

我解决了这个问题:

public function persist(Company $company)
{
  $subscription = $company->newSubscription('default', $this->input('plan'))->create($this->input('token'));

  return $subscription->owner()->subscribed(); //returns true
}

答案 1 :(得分:0)

今天,我在尝试断言用户已订阅计划时遇到了同样的问题。

解决方案是在创建订阅之后但在调用订阅之前刷新用户模型:

$this->user->refresh();

发生问题是因为Laravel Cashier在创建新订阅之前在用户模型中预加载了订阅关系。

因此,您还可以使用以下方式重新加载订阅:

$this->user->load('subscriptions');

在致电subscribed之前,这同样可以解决问题。