Laravel 收银员多重计划

Laravel Cashier Multiple Plans

任何人都使用过 Laravel 收银台并回答了我的以下问题。 我想取消订阅,在文档中是这样写的

$user->subscription('default')->cancelNow();

在我的例子中,用户拥有一个地方,我向订阅迁移添加了一个额外的 table,即“place_id”,并且他拥有的每个地方都有多个订阅,我可以让上面的代码更具体,写这样的东西,这样他就可以取消他拥有的地方的特定订阅

$user->subscription($planName)->where('place_id','=',$placeID)->cancelNow()

还尝试了订阅查询

$subscription = Subscription::query()->active()->
where(['place_id', '=', $placeID], ['user_id', '=', $user->id])->get();

$subscription->cancelNow()

不起作用,这只是我尝试过的方法,有人有什么想法吗?我只是在寻找一种方法来使用更具体的代码取消订阅,而不仅仅是订阅的名称。 谢谢和问候!

我有一个类似的情况,付费用户可以有一个以上的订阅者。我通过创建一个迁移来管理这个,该迁移将 subscriber_id 字段添加到订阅 table

Schema::table('subscriptions', function (Blueprint $table) {
    $table->integer('subscriber_id')->nullable()->after('user_id');
});

然后在创建订阅后更新该 ID。

$subscription = $subscription->create($paymentMethod->id); // returns stripe subscription
$subscription = Subscription::find($subscription->id); // so you have ot get the local subscription from the db
$subscription->update(['subscriber_id' => $subscriber->id]);

然后我可以通过订阅者 ID 和计划获取订阅者或特定订阅的所有订阅

$subscription = Subscription::where('subscriber_id', $subscriber->id)->where('stripe_plan','your_plan')...```

基本上你可以做同样的事情,但 place_id

所以我解决了我的问题,而不是使用

->get(); 

我用过:

->first();

像这样:

$subscription = Subscription::query()->active()->where([['place_id', '=', $placeID], ['user_id', '=', $user->id]])->first();

$subscription->cancelNow();

那是因为 first() 方法将 return 只有一个记录,而 get() 方法将 return 一组记录,即使在我的例子中它只 returned一个记录,因为它应该 return,但 first() 让它工作,它解决了我的问题。