Laravel 10 Follow System for Eloquent models.
This package is compliant with the FIG standards PSR-1, PSR-2 and PSR-4 to ensure a high level of interoperability between shared PHP. If you notice any compliance oversights, please send a patch via pull request.
Version | Laravel | PHP Version |
---|---|---|
9.x | 10.x | >= 8.1 |
8.x | 9.x | >= 8.0 |
7.x | 8.x | >= 7.3 |
6.x | 7.x | >= 7.2.5 |
5.x | 6.x | >= 7.2 |
4.x | 5.8.x | >= 7.1 |
3.x | 5.7.x | >= 7.1 |
2.x | 5.6.x | >= 7.1 |
1.x | 5.5.x | >= 7.0 |
You can install the package via composer:
composer require hypefactors/laravel-follow
The package will be automatically registered.
Now you need to run the migrations:
php artisan migrate
To allow an entity to be followed or to follow other entities, the corresponding models have to implement an interface and make usage of a trait.
Here's how we do it for a User
and Company
entity, where a user will be able to follow a company and the company will be able to be followed:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Hypefactors\Laravel\Follow\Traits\CanFollow;
use Hypefactors\Laravel\Follow\Contracts\CanFollowContract;
class User extends Model implements CanFollowContract
{
use CanFollow;
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Hypefactors\Laravel\Follow\Traits\CanBeFollowed;
use Hypefactors\Laravel\Follow\Contracts\CanBeFollowedContract;
class Company extends Model implements CanBeFollowedContract
{
use CanBeFollowed;
}
Note: If required, an entity can follow and can also be followed, just implement both interfaces and traits on the same model to achieve that requirement.
You can follow an entity like this:
$company = Company::find(1);
$user = User::find(1);
$user->follow($company);
You can also perform the same through the entity that's going to be followed:
$user = User::find(1);
$company = Company::find(1);
$company->addFollower($user);
You can follow many entities like this:
$companies = Company::whereIn('id', [1, 3, 10])->get();
$user = User::find(1);
$user->followMany($companies);
You can also perform the same through the entity that's going to be followed:
$users = User::whereIn('id', [1, 3, 10])->get();
$company = Company::find(1);
$company->addManyFollowers($users);
You can unfollow an entity like this:
$company = Company::find(1);
$user = User::find(1);
$user->unfollow($company);
You can also perform the same through the entity that's going to be unfollowed:
$user = User::find(1);
$company = Company::find(1);
$company->removeFollower($user);
You can unfollow many entities like this:
$companies = Company::whereIn('id', [1, 3, 10])->get();
$user = User::find(1);
$user->unfollowMany($companies);
You can also perform the same through the entity that's going to be unfollowed:
$users = User::whereIn('id', [1, 3, 10])->get();
$company = Company::find(1);
$company->removeManyFollowers($users);
You can unfollow an entity like this:
$company = Company::find(1);
$user = User::find(1);
$user->isFollowing($company);
You can also perform the same through the entity that's going to be followed:
$user = User::find(1);
$company = Company::find(1);
$company->hasFollower($user);
$user = User::find(1);
if ($user->hasFollowings()) {
echo "User is following {$user->followings->count()} entities.";
}
$company = Company::find(1);
if ($company->hasFollowers()) {
echo "Company has {$company->followers->count()} followers.";
}
To get a list of followings (entities another entity is following)
$user = User::find(1);
$followings = $user->followings
To get a list of followers (entities that are following an entity)
$company = Company::find(1);
$followers = $company->followers
Get a list of followings (entities another entity is following) and filter by an entity type
$user = User::find(1);
$followings = $user->followings()->whereFollowableType(Company::class)->get();
Get a list of followers (entities that are following an entity) and filter by an entity type
$company = Company::find(1);
$followers = $company->followers()->whereFollowerType(User::class)->get();
Thank you for your interest in Laravel Follow. Here are some of the many ways to contribute.
- Check out our contributing guide
- Look at our code of conduct
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
Laravel Follow is licenced under the BSD 3-Clause License. Please see the license file for more information.