Search code examples
phplaravellaravel-cashier

Laravel Cashier Multiple Plans


anyone used Laravel Cashier and has an answer to my below question. I want to cancel a subscription and in the docs it's written like that

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

In my case the user owns a place and i added an extra table to the subscriptions migration which is "place_id" and has multiple subscriptions for each place he owns, can i make the above code more specific and write something like this so he can cancel the specific subscription of a place he owns

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

Also tried a subscription query

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

$subscription->cancelNow()

Doesn't work, it's just something i tried, anyone got any ideas? I'm just looking for a way to cancel a subscription with a more specific code, not just the name of the subscription. Thanks and regards!


Solution

  • I have a similar situation where the paying user can have more than one subscriber with more than one subscription. I managed this by creating a migration that adds a subscriber_id field to the subscriptions table

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

    and then updating that ID after creating the subscription.

    $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]);
    

    I can then get all the subscriptions for a subscriber or a specific subscription by subscriber id and plan

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

    Essentially you could do the same but with place_id