jamesmills / watchable
A package to allow your Models to become watchable by a User
Installs: 4 383
Dependents: 0
Suggesters: 0
Security: 0
Stars: 68
Watchers: 4
Forks: 14
Open Issues: 1
Requires
- php: ^7.0
- illuminate/support: ~5.3.0 || ~5.4.0 || ~5.5.0 || 5.6.* || 5.7.* || 5.8.* || ^6 || ^7 || ^8
Requires (Dev)
README
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
watched
andunwatched
methods - 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.