multicaret/laravel-acquaintances
Clean, modular social features for Eloquent models: Friendships, Verifications, Interactions (Follow/Like/Favorite/Report/Subscribe/Vote/View), and multi-type Ratings.
morphs, uuidMorphs, or ulidMorphs.withAcquaintanceCounts() macro — eager-load interaction counts in a single query.HasAcquaintanceCounters trait — auto-increment/decrement counter columns on your model's table.AcquaintancesCleanupJob — queued mass deletion of acquaintance data for deleted models.blockFriend() and blockVerification().features config to skip their migrations entirely. Granular per-feature publish tags available.See CHANGELOG.md for the full list and Upgrade Notes for migration steps.
$user1 = User::find(1);
$user2 = User::find(2);
// Friendships
$user1->befriend($user2);
$user2->acceptFriendRequest($user1);
// The messy breakup :(
$user2->unfriend($user1);
// Verifications (message is optional)
$user1->verify($user2, "Worked together on several Laravel projects.");
$user2->acceptVerificationRequest($user1);
if ($user1->isVerifiedWith($user2)) {
echo "Verified!";
}
To keep this README concise, the full documentation lives under docs/:
composer require multicaret/laravel-acquaintances
php artisan vendor:publish --provider="Multicaret\\Acquaintances\\AcquaintancesServiceProvider"
php artisan migrate
If you only need interactions (Follow, Like, Favorite, Subscribe, Vote, View, Report, Rate) and don't need Friendships or Verifications, disable them in config/acquaintances.php:
'features' => [
'interactions' => true,
'friendships' => false,
'verifications' => false,
],
This prevents friendship and verification migrations from being loaded or published, keeping your database lean.
You can also publish migrations for specific features using granular tags:
# Only interaction migrations
php artisan vendor:publish --tag=acquaintances-migrations-interactions
# Only friendship migrations
php artisan vendor:publish --tag=acquaintances-migrations-friendships
# Only verification migrations
php artisan vendor:publish --tag=acquaintances-migrations-verifications
If your User model lives in a non-standard namespace (e.g., App\Models\Core\User), set user_model_class_name in config/acquaintances.php:
'user_model_class_name' => \App\Models\Core\User::class,
When null (default), the package resolves the user model from model_namespace + models.user (i.e., App\Models\User).
use Multicaret\\Acquaintances\\Traits\\Friendable;
use Multicaret\\Acquaintances\\Traits\\Verifiable;
use Multicaret\\Acquaintances\\Traits\\CanFollow;
use Multicaret\\Acquaintances\\Traits\\CanBeFollowed;
use Multicaret\\Acquaintances\\Traits\\CanLike;
use Multicaret\\Acquaintances\\Traits\\CanBeLiked;
use Multicaret\\Acquaintances\\Traits\\CanRate;
use Multicaret\\Acquaintances\\Traits\\CanBeRated;
class User extends Model {
use Friendable, Verifiable;
use CanFollow, CanBeFollowed;
use CanLike, CanBeLiked;
use CanRate, CanBeRated;
}
Explore the feature guides linked above for full APIs and examples.
| Version | PHP | Laravel |
|---|---|---|
| v4 | >= 8.1 | 9, 10, 11, 12, 13 |
| v3.x | >= 8.0 | 9, 10, 11, 12 |
How can I help you explore Laravel packages today?