This is a clone of hootlex/laravel-friendships that includes support for Laravel 5.8 as the original package does not seem to be maintained anymore.
This package gives Eloquent models the ability to manage their friendships. You can easily design a Facebook like Friend System.
- Send Friend Requests
- Accept Friend Requests
- Deny Friend Requests
- Block Another Model
- Group Friends
First, install the package through Composer.
composer require giliomeejg/laravel-friendships
If you are using Laravel < 5.5, you need to add giliomeejg\Friendships\FriendshipsServiceProvider to your config/app.php
providers array:
giliomeejg\Friendships\FriendshipsServiceProvider::class,
Publish config and migrations
php artisan vendor:publish --provider="giliomeejg\Friendships\FriendshipsServiceProvider"
Configure the published config in
config\friendships.php
Finally, migrate the database
php artisan migrate
use giliomeejg\Friendships\Traits\Friendable;
class User extends Model
{
use Friendable;
...
}
Check the Test file to see the package in action
$user->befriend($recipient);
$user->acceptFriendRequest($sender);
$user->denyFriendRequest($sender);
$user->unfriend($friend);
$user->blockFriend($friend);
$user->unblockFriend($friend);
$user->isFriendWith($friend);
$user->hasFriendRequestFrom($sender);
$user->hasSentFriendRequestTo($recipient);
$user->hasBlocked($friend);
$user->isBlockedBy($friend);
$user->getFriendship($friend);
$user->getAllFriendships();
$user->getPendingFriendships();
$user->getAcceptedFriendships();
$user->getDeniedFriendships();
$user->getBlockedFriendships();
$user->getFriendRequests();
$user->getFriendsCount();
$user->getPendingsCount();
$user->getMutualFriendsCount($otherUser);
To get a collection of friend models (ex. User) use the following methods:
$user->getFriends();
$user->getFriends($perPage = 20);
$user->getFriendsOfFriends($perPage = 20);
$user->getFriends($perPage = 20, $group_name);
$user->getMutualFriends($otherUser, $perPage = 20);
The friend groups are defined in the config/friendships.php
file.
The package comes with a few default groups.
To modify them, or add your own, you need to specify a slug
and a key
.
// config/friendships.php
...
'groups' => [
'acquaintances' => 0,
'close_friends' => 1,
'family' => 2
]
Since you've configured friend groups, you can group/ungroup friends using the following methods.
$user->groupFriend($friend, $group_name);
$user->ungroupFriend($friend, 'family');
$user->ungroupFriend($friend);
$user->getFriendsCount($group_name);
$user->getAllFriendships($group_name);
$user->getAcceptedFriendships($group_name);
$user->getPendingFriendships($group_name);
...
This is the list of the events fired by default for each action
Event name | Fired |
---|---|
friendships.sent | When a friend request is sent |
friendships.accepted | When a friend request is accepted |
friendships.denied | When a friend request is denied |
friendships.blocked | When a friend is blocked |
friendships.unblocked | When a friend is unblocked |
friendships.cancelled | When a friendship is cancelled |
See the CONTRIBUTING guide.