All Projects → ChristianKuri → Laravel Favorite

ChristianKuri / Laravel Favorite

Licence: mit
Allows Laravel Eloquent models to implement a 'favorite', 'like', 'remember' and 'follow' features.

Projects that are alternatives of or similar to Laravel Favorite

Laravel Model Settings
Model Settings for your Laravel app
Stars: ✭ 409 (+110.82%)
Mutual labels:  eloquent-models, trait
Laravel Database Encryption
A package for automatically encrypting and decrypting Eloquent attributes in Laravel 5.5+, based on configuration settings.
Stars: ✭ 238 (+22.68%)
Mutual labels:  eloquent-models, laravel-5-package
Kubevela
The Modern Application Platform.
Stars: ✭ 2,984 (+1438.14%)
Mutual labels:  trait
Laravel Page Speed
Package to optimize your site automatically which results in a 35%+ optimization
Stars: ✭ 2,097 (+980.93%)
Mutual labels:  laravel-5-package
Laravel Auto Translate
Automatically translate your language files using a translator service
Stars: ✭ 153 (-21.13%)
Mutual labels:  laravel-5-package
Traits Decorator
Traits with decorators
Stars: ✭ 133 (-31.44%)
Mutual labels:  trait
Schedule
Schedule is a package that helps tracking schedules for your models. If you have workers in a company, you can set schedules for them and see their availability though the time.
Stars: ✭ 155 (-20.1%)
Mutual labels:  trait
L5 Very Basic Auth
Stateless HTTP basic auth for Laravel without the need for a database.
Stars: ✭ 127 (-34.54%)
Mutual labels:  laravel-5-package
Laravel Cart Manager
Managing the cart in your Laravel/E-commerce application is a breeze
Stars: ✭ 175 (-9.79%)
Mutual labels:  laravel-5-package
Adminlte Laravel
A Laravel 5 package that switchs default Laravel scaffolding/boilerplate to AdminLTE template and Pratt Landing Page with Bootstrap 3.0
Stars: ✭ 1,814 (+835.05%)
Mutual labels:  laravel-5-package
Telegram Bot Sdk
🤖 Telegram Bot API PHP SDK. Lets you build Telegram Bots easily! Supports Laravel out of the box.
Stars: ✭ 2,212 (+1040.21%)
Mutual labels:  laravel-5-package
Credit Card
Credit Card Validation
Stars: ✭ 150 (-22.68%)
Mutual labels:  laravel-5-package
Laravel Messenger
Notifying your users doesn't have to be a lot of work.
Stars: ✭ 135 (-30.41%)
Mutual labels:  laravel-5-package
Searchable
A php trait to search laravel models
Stars: ✭ 1,923 (+891.24%)
Mutual labels:  eloquent-models
Laravel Model Caching
Eloquent model-caching made easy.
Stars: ✭ 1,829 (+842.78%)
Mutual labels:  laravel-5-package
Partyline
Output to Laravel's console from outside of your Command classes.
Stars: ✭ 168 (-13.4%)
Mutual labels:  laravel-5-package
Laravel Swagger
Auto generates the swagger documentation of a laravel project based on best practices and simple assumptions
Stars: ✭ 129 (-33.51%)
Mutual labels:  laravel-5-package
Has Parameters
A trait that allows you to pass arguments to Laravel middleware in a more PHP'ish way.
Stars: ✭ 149 (-23.2%)
Mutual labels:  trait
Laravel Mobile Detect
Mobile detection within Blade templates
Stars: ✭ 154 (-20.62%)
Mutual labels:  laravel-5-package
Laravel Translation Manager
Enhanced Management of Laravel 4 & 5 Translations, with Yandex Translation API assisted translations.
Stars: ✭ 178 (-8.25%)
Mutual labels:  laravel-5-package

Laravel Favorite (Laravel 5, 6, 7, 8 Package)

Latest Version on Packagist Packagist Downloads Software License Build Status

Allows Laravel Eloquent models to implement a 'favorite' or 'remember' or 'follow' feature.

Index

Installation

  1. Install the package via Composer
$ composer require christiankuri/laravel-favorite
  1. In Laravel >=5.5 this package will automatically get registered. For older versions, update your config/app.php by adding an entry for the service provider.
'providers' => [
    // ...
    ChristianKuri\LaravelFavorite\FavoriteServiceProvider::class,
];
  1. Publish the database from the command line:
php artisan vendor:publish --provider="ChristianKuri\LaravelFavorite\FavoriteServiceProvider"
  1. Migrate the database from the command line:
php artisan migrate

Models

Your User model should import the Traits/Favoriteability.php trait and use it, that trait allows the user to favorite the models. (see an example below):

use ChristianKuri\LaravelFavorite\Traits\Favoriteability;

class User extends Authenticatable
{
	use Favoriteability;
}

Your models should import the Traits/Favoriteable.php trait and use it, that trait have 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', thats for example propuses only. (see an example below):

use ChristianKuri\LaravelFavorite\Traits\Favoriteable;

class Post extends Model
{
    use Favoriteable;
}

That's it ... your model is now "favoriteable"! Now the User can favorite models that have the favoriteable trait.

Usage

The models can be favorited with and without an authenticated user (see examples below):

Add to favorites and remove from favorites:

If no param is passed in the favorite method, then the model will asume the auth user.

$post = Post::find(1);
$post->addFavorite(); // auth user added to favorites this post
$post->removeFavorite(); // auth user removed from favorites this post
$post->toggleFavorite(); // auth user toggles the favorite status from this post

If a param is passed in the favorite method, then the model will asume the user with that id.

$post = Post::find(1);
$post->addFavorite(5); // user with that id added to favorites this post
$post->removeFavorite(5); // user with that id removed from favorites this post
$post->toggleFavorite(5); // user with that id toggles the favorite status from this post

The user model can also add to favorites and remove from favrites:

$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

Return the favorite objects for the user:

A user can return the objects he marked as favorite. You just need to pass the class in the favorite() method in the User model.

$user = Auth::user();
$user->favorite(Post::class); // returns a collection with the Posts the User marked as favorite

Return the favorites count from an object:

You can return the favorites count from an object, you just need to return the favoritesCount attribute from the model

$post = Post::find(1);
$post->favoritesCount; // returns the number of users that have marked as favorite this object.

Return the users who marked this object as favorite

You can return the users who marked this object, you just need to call the favoritedBy() method in the object

$post = Post::find(1);
$post->favoritedBy(); // returns a collection with the Users that marked the post as favorite.

Check if the user already favorited an object

You can check if the Auth user have already favorited an object, you just need to call the isFavorited() method in the object

$post = Post::find(1);
$post->isFavorited(); // returns a boolean with true or false.

Testing

The package have integrated testing, so everytime you make a pull request your code will be tested.

Change log

Please see CHANGELOG for more information on what has changed recently.

Contributions

Contributions are welcome and will be fully credited. We accept contributions via Pull Requests on Github.

Pull Requests

  • PSR-2 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.

Security

Please report any issue you find in the issues page. Pull requests are welcome.

Credits

License

The MIT License (MIT). Please see License File for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].