pharaonic / laravel-favorites
Polymorphic favorites for Laravel Eloquent models, with database-enforced uniqueness and explicit changed-state results.
13.0.0
2026-11-12 18:35 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 favorites for Eloquent models, kept unique by the database.
Installation
composer require pharaonic/laravel-favorites php artisan migrate
The service provider is registered automatically, and migrate creates the favorites table. Publish the migration only to change it (--tag=favorites-migrations), and the configuration only to rename the table or turn off cleanup on delete:
php artisan vendor:publish --tag=favorites-config
Usage
Add CanFavorite to the model that favorites (it does not have to be a user) and HasFavorites to the model that is favorited. A model can use both.
use Illuminate\Foundation\Auth\User as Authenticatable; use Pharaonic\Laravel\Favorites\Concerns\CanFavorite; class User extends Authenticatable { use CanFavorite; }
use Illuminate\Database\Eloquent\Model; use Pharaonic\Laravel\Favorites\Concerns\HasFavorites; class Post extends Model { use HasFavorites; }
$user->favorite($post); // true: this call created the favorite $user->favorite($post); // false: it already existed $user->hasFavorited($post); // true $user->unfavorite($post); // true: this call removed it, false when there was none $user->toggleFavorite($post); // the new state: true when favorited $post->favoriteBy($user); // same as $user->favorite($post) $post->unfavoriteBy($user); // same as $user->unfavorite($post) $post->favoritedBy($user); // same as $user->hasFavorited($post) Post::withCount('favorites')->with('favorites.favoriter')->get(); Post::whereFavoritedBy($user)->latest()->paginate(); $user->givenFavorites()->with('favoritable')->latest()->get();
Documentation
Full documentation: Laravel Favorites Documentation.
Support & Security
See SUPPORT.md and SECURITY.md. Contributions are welcome; see CONTRIBUTING.md.
License
MIT. See LICENSE.
