PHPackages                             kazistm/subscriptions - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. kazistm/subscriptions

ActiveLaravel-package[Database &amp; ORM](/categories/database)

kazistm/subscriptions
=====================

Flexible Laravel subscription and plan management system with features, limitations, and usage tracking.

v1.0.2(1mo ago)21MITPHPPHP ^8.2

Since Apr 18Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/KaziSTM/subscriptions)[ Packagist](https://packagist.org/packages/kazistm/subscriptions)[ Docs](https://github.com/KaziSTM/subscriptions)[ RSS](/packages/kazistm-subscriptions/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (26)Versions (25)Used By (0)

KaziSTM Subscriptions
=====================

[](#kazistm-subscriptions)

[![Latest Version on Packagist](https://camo.githubusercontent.com/b3801fba5f8392e2be7258feb8338b52401da4ba5b4fc6939e80fec12ddc4867/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6b617a6973746d2f737562736372697074696f6e732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/kazistm/subscriptions)[![Total Downloads](https://camo.githubusercontent.com/3182674f7165dbda5bef280c2603a5ca3924e2090aa451227bfb6c0808178725/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6b617a6973746d2f737562736372697074696f6e732e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/kazistm/subscriptions)[![License](https://camo.githubusercontent.com/576fcc9e76b1a262da225839ddf971a5ccd1509d9ac25f4e32937f3c2ac6cd0a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6b617a6973746d2f737562736372697074696f6e733f7374796c653d666c61742d737175617265)](https://github.com/KaziSTM/subscriptions/blob/main/LICENSE.md)**A flexible and extendable subscription and plan management system for Laravel applications, particularly suited for SaaS products.** This package provides tools to manage recurring plans, features with usage limits, and subscription lifecycles.

This package is based on, and aims to enhance, the foundation laid by `laravelcm/laravel-subscriptions`.

Table of Contents
-----------------

[](#table-of-contents)

- [Key Features &amp; Enhancements](#key-features--enhancements)
- [Requirements](#requirements)
- [Installation](#installation)
- [Configuration](#configuration)
- [Database Migrations](#database-migrations)
- [Core Concepts &amp; Models](#core-concepts--models)
    - [1. Subscribable Model](#1-subscribable-model)
    - [2. Plan (KaziSTM\\Subscriptions\\Models\\Plan)](#2-plan-kazistmsubscriptionsmodelsplan)
    - [3. Limitation (KaziSTM\\Subscriptions\\Models\\Limitation)](#3-limitation-kazistmsubscriptionsmodelslimitation)
    - [4. Feature (KaziSTM\\Subscriptions\\Models\\Feature)](#4-feature-kazistmsubscriptionsmodelsfeature)
    - [5. Subscription (KaziSTM\\Subscriptions\\Models\\Subscription)](#5-subscription-kazistmsubscriptionsmodelssubscription)
    - [6. Subscription Usage (KaziSTM\\Subscriptions\\Models\\SubscriptionUsage)](#6-subscription-usage-kazistmsubscriptionsmodelssubscriptionusage)
    - [Note on Slugs vs Names/Titles](#note-on-slugs-vs-namestitles)
- [Usage](#usage)
    - [Preparation](#preparation)
    - [Managing Subscriptions](#managing-subscriptions)
    - [Managing Feature Usage](#managing-feature-usage)
- [Middleware](#middleware)
    - [Registration (Laravel 11+)](#registration-laravel-11)
    - [Registration (Pre-Laravel 11)](#registration-pre-laravel-11)
    - [Usage in Routes](#usage-in-routes)
    - [Subscribable Entity Detection](#subscribable-entity-detection)
- [Extending Models](#extending-models)
- [Support &amp; Issues](#support--issues)
- [License](#license)
- [Credits](#credits)

Key Features &amp; Enhancements
-------------------------------

[](#key-features--enhancements)

- Manages Plans, Subscriptions, Features, and Usage tracking.
- **Introduces a Limitation model:** Logically groups related features (e.g., 'Build Minutes', 'Seats', 'Storage Size'), providing translatable titles and descriptions. Features now primarily hold the *value* or quota, inheriting context from the Limitation.
- Supports trial periods, grace periods, plan changes, cancellations, and renewals.
- Features can have usage recorded against them, with optional periodic resetting (e.g., monthly email quotas).
- Includes an `artisan subscriptions:install` command for easy setup (config, migrations, optional model stubs).
- Includes Middleware for checking active subscriptions (`subscription.active`) and plan features (`subscription.feature`).
- Provides helper relationships (`limitations()`) and scopes (`scopeWhereHasLimitationSlug()`) on the Plan model.
- Uses Spatie packages for core functionalities like slugs (`spatie/laravel-sluggable`), translatable fields (`spatie/laravel-translatable`), and sortable models (`spatie/eloquent-sortable`).
- Built with `spatie/laravel-package-tools` for standard package structure.

Requirements
------------

[](#requirements)

- PHP: &gt;= 8.2
- Laravel: &gt;= 10.x

Installation
------------

[](#installation)

1. Install the package via Composer:

    ```
    composer require kazistm/subscriptions
    ```
2. Run the installation command:

    ```
    php artisan subscriptions:install
    ```

    This interactive command will:

    - Ask if you want to publish the **configuration file** (`config/subscriptions.php`). Defaults to yes.
    - Publish the necessary **database migrations** to your `database/migrations` folder (it checks for existing migrations with the same base name to avoid duplication).
    - Ask if you want to publish basic **model stubs** (`Plan.php`, `Subscription.php`, etc.) to your `app/Models` directory. This is optional and only needed if you plan to directly extend or override the package's models. Defaults to no.
    - Automatically run `php artisan migrate` to create the required database tables.

Configuration
-------------

[](#configuration)

The main configuration file is located at `config/subscriptions.php` after publishing.

- **Publishing (if skipped during install):**

    ```
    php artisan vendor:publish --tag=subscriptions-config
    ```
- **Options:**

    - `tables`: Customize the names of the database tables used by the package. Defaults are usually fine.
    - `models`: Define which Eloquent models the package should use. This allows you to override the default models with your own extended versions (see Extending Models section).

Database Migrations
-------------------

[](#database-migrations)

The `subscriptions:install` command handles publishing and running migrations. The following tables are created (using default names):

- `plans`: Stores subscription plans details.
- `limitations`: Defines types of features/limits (e.g., 'users', 'projects').
- `features`: Links Plans to Limitations and sets the value/quota.
- `subscriptions`: Links subscribable models (e.g., Users) to Plans and tracks lifecycle.
- `subscription_usage`: Tracks consumption of resettable features.

Core Concepts &amp; Models
--------------------------

[](#core-concepts--models)

### 1. Subscribable Model

[](#1-subscribable-model)

Your model that will have subscriptions (typically `App\Models\User`, but can be any model like `App\Models\Company`) needs to use the `KaziSTM\Subscriptions\Traits\HasPlanSubscriptions` trait.

```
