Allows Laravel Eloquent models to implement a 'favorite' or 'remember' or 'follow' feature.
- Install the package via Composer
$ composer require manzadey/laravel-favorite
- You need to publish the migration to create the
favorites
table:
php artisan vendor:publish --provider="Manzadey\LaravelFavorite\FavoriteServiceProvider" --tag="migrations"
- After that, you need to run migrations:
php artisan migrate
Publishing the config file is optional:
php artisan vendor:publish --provider="Manzadey\LaravelFavorite\FavoriteServiceProvider" --tag="config"
This is the default content of the config file:
declare(strict_types=1);
return [
/*
* The fully qualified class name of the favorite model.
*/
'model' => \Manzadey\LaravelFavorite\Models\Favorite::class,
];
Your User model should import the Favoriteability
trait, FavoriteabilityContract
implements interface and use it, that trait allows the user to favorite the models.
(see an example below):
use Manzadey\LaravelFavorite\Traits\Favoriteability;
use Manzadey\LaravelFavorite\Contracts\FavoriteabilityContract;
class User extends Authenticatable implements FavoriteabilityContract;
{
use Favoriteability;
}
Your models should import the Favoriteable
trait, FavoriteableContract
implements interface and use it, that trait has the methods that you'll use to allow the model be favoriteable.
In all the examples I will use the Post model as the model that is 'Favoriteable', that's for example proposes only.
(see an example below):
use Manzadey\LaravelFavorite\Traits\Favoriteable;
use Manzadey\LaravelFavorite\Contracts\FavoriteableContract;
class Post extends Model implements FavoriteableContract
{
use Favoriteable;
}
That's it ... your model is now "favoriteable"! Now the User can favorite models that have the favoriteable trait.
The models can be favorite with and without an authenticated user (see examples below):
If a param is passed in the favorite method, then the model will assume the user with that user model.
$user = User::first();
$post = Post::find(1);
$post->addFavorite($user); // user with that id added to favorites this post
$post->removeFavorite($user); // user with that id removed from favorites this post
$post->toggleFavorite($user); // user with that id toggles the favorite status from this post
The user model can also add to favorites and remove from favorites:
$user = User::first();
$post = Post::first();
$user->addFavorite($post); // The user added to favorites this post
$user->removeFavorite($post); // The user removed from favorites this post
$user->toggleFavorite($post); // The user toggles the favorite status from this post
A user can return the objects he marked as favorite.
You just need to pass the class in the getFavorite()
method in the User
model.
$user = Auth::user();
$user->getFavorite(Post::class, Article::class); // returns a collection with the Posts the User marked as favorite
You can return the users who marked this object, you just need to call the favoriteBy()
method in the object
$post = Post::find(1);
$post->favoriteBy(); // returns a collection with the Users that marked the post as favorite.
You can check if the Auth user have already favorite an object, you just need to call the isFavorite()
method in the object
$post = Post::find(1);
$post->isFavorite(); // returns a boolean with true or false.
The package have integrated testing, so everytime you make a pull request your code will be tested.
Please see CHANGELOG for more information on what has changed recently.
Contributions are welcome and will be fully credited. We accept contributions via Pull Requests on Github.
-
PSR-12 Coding Standard - Check the code style with
$ composer check-style
and fix it with$ composer fix-style
. -
Add tests! - Your patch won't be accepted if it doesn't have tests.
-
Document any change in behaviour - Make sure the
README.md
and any other relevant documentation are kept up-to-date. -
Consider our release cycle - We try to follow SemVer v2.0.0. Randomly breaking public APIs is not an option.
-
Create feature branches - Don't ask us to pull from your master branch.
-
One pull request per feature - If you want to do more than one thing, send multiple pull requests.
-
Send coherent history - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please squash them before submitting.
Please report any issue you find in the issues page. Pull requests are welcome.
The MIT License (MIT). Please see License File for more information.