jamesmills/watchable
| Install | |
|---|---|
composer require jamesmills/watchable |
|
| Latest Version: | 1.3.1 |
| PHP: | ^7.0 |
| License: | MIT |
| Last Updated: | Feb 15, 2023 |
| Links: | GitHub · Packagist |
Laravel Watchable
Enable users to watch various models in your application.
- Designed to work with Laravel Eloquent models
- Just add the trait to the model you would like to be watchable
- Watches are unique for one model and one user
- Events are fired on
watchedandunwatchedmethods - Built to work with Laravel Notifications
Installation
Pull in the package using Composer
composer require jamesmills/watchable
Note: If you are using Laravel 5.5, the next step for provider are unnecessary. Laravel Watchable supports Laravel Package Discovery.
Include the service provider within app/config/app.php.
'providers' => [
...
JamesMills\Watchable\WatchableServiceProvider::class,
],
Publish and run the database migrations
php artisan vendor:publish --provider="JamesMills\Watchable\WatchableServiceProvider" --tag="migrations"
php artisan migrate
Sample Usage and Boilerplate
I wrote a blog post to give you some boilerplate code that you can use in your application to wrap around the Laravel Watchable package.
https://jamesmills.co.uk/2017/10/22/laravel-watchable-package
How to use
Prepare your model to be watched
Simply add the watchable trait to your model
use Illuminate\Database\Eloquent\Model;
use JamesMills\Watchable\Traits\Watchable;
class Book extends Model {
use Watchable;
}
Available methods
Watch a model
$book = Book::first();
$book->watch();
Unwatch a model
$book = Book::first();
$book->unwatch();
Toggle the watching of a model
$book = Book::first();
$book->toggleWatch();
You can optionally send the $user_id if you don't want to use the built in auth()->user()->id functionality.
$book = Book::first();
$book->watch($user_id);
$book->unwatch($user_id);
$book->toggleWatch($user_id);
Find out if the current user is watching the model
@if ($book->isWatched())
{{ You are watching this book }}
@else
{{ You are NOT watching this book }}
@endif
Get a collection of the user who are watching a model
$book = Book::first();
$book->collectWatchers();
Use with Notifications
One of the main reasons I built this package was to scratch my own itch with an application I am building. I wanted to be able to send notifications to user who were watching a given model and I also wanted to allow users to be able to watch a number of different models.
public function pause(Order $order)
{
$this->performAction('paused', $order);
Notification::send($order->collectWatchers(), new OrderPaused($order));
}
License
This package is 100% free and open-source, under the MIT license. Use it however you want.
This package is Treeware. If you use it in production, then we ask that you buy the world a tree to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.
Related Packages
Make Laravel Eloquent models reactable with any type of emotions in a minutes!
Implementation of a 'like' or 'favorite' or 'remember' feature. Supports for ses...
Trait for Laravel Eloquent models to allow easy implementation of a 'flag' featu...