pharaonic / laravel-likes
Polymorphic likes for Laravel Eloquent models, with database-enforced uniqueness and explicit changed-state results.
13.0.2
2026-11-04 15:47 UTC
Requires
- php: >=8.3 <8.6
- illuminate/contracts: ^13.0
- illuminate/database: ^13.0
- illuminate/support: ^13.0
Requires (Dev)
- laravel/pint: ^1.20
- orchestra/testbench: ^11.0
- pestphp/pest: ^4.0
- phpstan/phpstan: ^2.1.33
- phpunit/phpunit: ^12.5.8
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Polymorphic likes for Eloquent models, kept unique by the database.
Installation
composer require pharaonic/laravel-likes php artisan migrate
The service provider is registered automatically, and migrate creates the likes table. Publish the migration only to change it (--tag=likes-migrations), and the configuration only to rename the table or turn off cleanup on delete:
php artisan vendor:publish --tag=likes-config
Usage
Add CanLike to the model that likes (it does not have to be a user) and HasLikes to the model that is liked. A model can use both.
use Illuminate\Foundation\Auth\User as Authenticatable; use Pharaonic\Laravel\Likes\Concerns\CanLike; class User extends Authenticatable { use CanLike; }
use Illuminate\Database\Eloquent\Model; use Pharaonic\Laravel\Likes\Concerns\HasLikes; class Post extends Model { use HasLikes; }
$user->like($post); // true: this call created the like $user->like($post); // false: it already existed $user->hasLiked($post); // true $user->unlike($post); // true: this call removed it, false when there was none $user->toggleLike($post); // the new state: true when liked $post->likeBy($user); // same as $user->like($post) $post->unlikeBy($user); // same as $user->unlike($post) $post->likedBy($user); // same as $user->hasLiked($post) Post::withCount('likes')->with('likes.liker')->get(); Post::whereLikedBy($user)->latest()->paginate(); $user->givenLikes()->with('likeable')->latest()->get();
Documentation
Full documentation: Laravel Likes Documentation.
Support & Security
See SUPPORT.md and SECURITY.md. Contributions are welcome; see CONTRIBUTING.md.
License
MIT. See LICENSE.
