PHPackages                             gorankrgovic/laravel-subscribeable - 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. gorankrgovic/laravel-subscribeable

ActiveLibrary[Database &amp; ORM](/categories/database)

gorankrgovic/laravel-subscribeable
==================================

Make Laravel Eloquent models Subscribeable.

v1.0.1(7y ago)236MITPHPPHP ^7.0

Since Jan 16Pushed 7y ago1 watchersCompare

[ Source](https://github.com/gorankrgovic/laravel-subscribeable)[ Packagist](https://packagist.org/packages/gorankrgovic/laravel-subscribeable)[ Docs](https://github.com/gorankrgovic/laravel-subscribeable)[ RSS](/packages/gorankrgovic-laravel-subscribeable/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependencies (8)Versions (6)Used By (0)

Laravel Subscribe
=================

[](#laravel-subscribe)

Introduction
------------

[](#introduction)

IMPORTANT: This is not a package for managing subscribers related to memberships and payed methods. It is used for managing user/subscriber relations just like in YouTube for example, where the model can be subscribed by user.

This package is based on an idea and an architecture of the [Laravel Love](https://github.com/cybercog/laravel-love) package, although the functionality is different.

Features
--------

[](#features)

- Uses UUIDs instead of integers (your user model must use them as well!)
- Designed to work with Laravel Eloquent models.
- Using contracts to keep high customization capabilities.
- Using traits to get functionality out of the box.
- Most part of the the logic is handled by the `SubscribeableService`.
- Has Artisan command `gosubscribe:recount {model?}` to re-fetch subscribe counters.
- Subscribes for one model are mutually exclusive.
- Get Subscribeable models ordered by subscribe count.
- Events for `subscribe`, `unsubscribe` methods.
- Following PHP Standard Recommendations:
    - [PSR-1 (Basic Coding Standard)](http://www.php-fig.org/psr/psr-1/).
    - [PSR-2 (Coding Style Guide)](http://www.php-fig.org/psr/psr-2/).
    - [PSR-4 (Autoloading Standard)](http://www.php-fig.org/psr/psr-4/).
- Covered with unit tests.

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

[](#installation)

First, pull in the package through Composer.

```
$ composer require gorankrgovic/laravel-subscribe
```

#### Perform Database Migration

[](#perform-database-migration)

At last you need to publish and run database migrations.

```
$ php artisan migrate
```

If you want to make changes in migrations, publish them to your application first.

```
$ php artisan vendor:publish --provider="Gox\Laravel\Subscribe\Providers\SubscribeServiceProvider" --tag=migrations
```

Usage
-----

[](#usage)

### Prepare Subscriber Model

[](#prepare-subscriber-model)

Use `Gox\Contracts\Subscribe\Subscriber\Models\Subscriber` contract in model which will get subscribes behavior and implement it or just use `Gox\Laravel\Subscribe\Subscriber\Models\Traits\Subscriber` trait.

```
use Gox\Contracts\Subscribe\Subscriber\Models\Subscriber as SubscriberContract;
use Gox\Laravel\Subscribe\Subscriber\Models\Traits\Subscriber;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements SubscriberContract
{
    use Subscriber;
}
```

### Prepare Subscribeable Model

[](#prepare-subscribeable-model)

Use `Gox\Contracts\Subscribe\Subscribeable\Models\Subscribeable` contract in model which will get subscribes behavior and implement it or just use `Gox\Laravel\Subscribe\Subscribeable\Models\Traits\Subscribeable` trait.

```
use Gox\Contracts\Subscribe\Subscribeable\Models\Subscribeable as SubscribeableContract;
use Gox\Laravel\Subscribe\Subscribeable\Models\Traits\Subscribeable;
use Illuminate\Database\Eloquent\Model;

class Article extends Model implements SubscribeableContract
{
    use Subscribeable;
}
```

### Available Methods

[](#available-methods)

#### Subscribes

[](#subscribes)

##### Subscribe model

[](#subscribe-model)

```
$user->subscribe($article);

$article->subscrubeBy(); // current user
$article->subscribeBy($user->id);
```

##### Remove subscribe mark from model

[](#remove-subscribe-mark-from-model)

```
$user->unsubscribe($article);

$article->unsubscribeBy(); // current user
$article->unsubscribeBy($user->id);
```

##### Get model subscribe count

[](#get-model-subscribe-count)

```
$article->subcribesCount;
```

##### Get model subscribes counter

[](#get-model-subscribes-counter)

```
$article->subscribesCounter;
```

##### Get subscribes relation

[](#get-subscribes-relation)

```
$article->subscribes();
```

##### Get iterable `Illuminate\Database\Eloquent\Collection` of existing model subscribes

[](#get-iterable-illuminatedatabaseeloquentcollection-of-existing-model-subscribes)

```
$article->subscribes;
```

##### Boolean check if user subscribed to model

[](#boolean-check-if-user-subscribed-to-model)

```
$user->hasSubscribed($article);

$article->subscribed; // current user
$article->isSubscribedBy(); // current user
$article->isSubscribedBy($user->id);
```

*Checks in eager loaded relations `subscribes` first.*

##### Get collection of users who subscribed to model

[](#get-collection-of-users-who-subscribed-to-model)

```
$article->collectSubscribers();
```

##### Delete all subscribers for model

[](#delete-all-subscribers-for-model)

```
$article->removeSubscribes();
```

### Scopes

[](#scopes)

##### Find all articles subscribed by user

[](#find-all-articles-subscribed-by-user)

```
Article::whereSubscribedBy($user->id)
    ->with('subscribesCounter') // Allow eager load (optional)
    ->get();
```

##### Fetch Subscribeable models by subscribes count

[](#fetch-subscribeable-models-by-subscribes-count)

```
$sortedArticles = Article::orderBySubscribesCount()->get();
$sortedArticles = Article::orderBySubscribesCount('asc')->get();
```

*Uses `desc` as default order direction.*

### Events

[](#events)

On each subscribe added `\Gox\Laravel\Subscribe\Subscribeable\Events\SubscribeableWasSubscribed` event is fired.

On each subscribe removed `\Gox\Laravel\Subscribe\Subscribeable\Events\SubscribeableWasUnsubscribed` event is fired.

### Console Commands

[](#console-commands)

##### Recount subscribers of all model types

[](#recount-subscribers-of-all-model-types)

```
$ gosubscribe:recount
```

##### Recount of concrete model type (using morph map alias)

[](#recount-of-concrete-model-type-using-morph-map-alias)

```
$ gosubscribe:recount --model="article"
```

##### Recount of concrete model type (using fully qualified class name)

[](#recount-of-concrete-model-type-using-fully-qualified-class-name)

```
$ gosubscribe:recount --model="App\Models\Article"
```

Extending
---------

[](#extending)

You can override core classes of package with your own implementations:

- `Gox\Laravel\Subscribe\Subscribe\Models\Subscribe`
- `Gox\Laravel\Subscribe\SubscribeCounter\Models\SubscribeCounter`
- `Gox\Laravel\Subscribe\Subscribeable\Services\SubscribeableService`

*Note: Don't forget that all custom models must implement original models interfaces.*

To make it you should use container [binding interfaces to implementations](https://laravel.com/docs/master/container#binding-interfaces-to-implementations) in your application service providers.

##### Use model class own implementation

[](#use-model-class-own-implementation)

```
$this->app->bind(
    \Gox\Contracts\Subscribe\Subscribe\Models\Subscribe::class,
    \App\Models\CustomSubscribe::class
);
```

After that your `CustomSubscribe` class will be instantiable with helper method `app()`.

```
$model = app(\Gox\Contracts\Subscribe\Subscribe\Models\Subscribe::class);
```

Testing
-------

[](#testing)

Run the tests with:

```
$ vendor/bin/phpunit
```

Security
--------

[](#security)

If you discover any security related issues, please email me instead of using the issue tracker.

License
-------

[](#license)

- `Laravel Subscribe` package is open-sourced software licensed under the [MIT license](LICENSE) by Goran Krgovic.

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity10

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~15 days

Total

5

Last Release

2615d ago

Major Versions

v0.0.12 → v1.0.02019-01-17

### Community

Maintainers

![](https://www.gravatar.com/avatar/dc897661efd3f9b1d0b6cee6fa6eb2f5535819e0c2e0a0adab66b4d6002133be?d=identicon)[gorankrgovic](/maintainers/gorankrgovic)

---

Tags

laraveleloquenttraitsubscribegorankrgovicunsubscribe

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/gorankrgovic-laravel-subscribeable/health.svg)

```
[![Health](https://phpackages.com/badges/gorankrgovic-laravel-subscribeable/health.svg)](https://phpackages.com/packages/gorankrgovic-laravel-subscribeable)
```

###  Alternatives

[cybercog/laravel-ban

Laravel Ban simplify blocking and banning Eloquent models.

1.1k651.8k11](/packages/cybercog-laravel-ban)[dyrynda/laravel-model-uuid

This package allows you to easily work with UUIDs in your Laravel models.

4802.8M8](/packages/dyrynda-laravel-model-uuid)[cybercog/laravel-love

Make Laravel Eloquent models reactable with any type of emotions in a minutes!

1.2k302.7k1](/packages/cybercog-laravel-love)[tucker-eric/eloquentfilter

An Eloquent way to filter Eloquent Models

1.8k4.8M26](/packages/tucker-eric-eloquentfilter)[watson/validating

Eloquent model validating trait.

9723.3M47](/packages/watson-validating)[cviebrock/eloquent-taggable

Easy ability to tag your Eloquent models in Laravel.

567694.8k3](/packages/cviebrock-eloquent-taggable)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
