A package to allow your Models to become watchable by a User
jamesmills/watchable is a Laravel package for a package to allow your models to become watchable by a user.
It currently has 68 GitHub stars and 5.815 downloads on Packagist (latest version 1.3.1).
Install it with composer require jamesmills/watchable.
Discover more Laravel packages by jamesmills
or browse all Laravel packages to compare alternatives.
Last updated
Enable users to watch various models in your application.
watched and unwatched methodsPull 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
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
Simply add the watchable trait to your model
use Illuminate\Database\Eloquent\Model;
use JamesMills\Watchable\Traits\Watchable;
class Book extends Model {
use Watchable;
}
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();
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));
}
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.