curly-deni / laravel-notifications
Reusable database notifications for Laravel applications.
Package info
github.com/curly-deni/laravel-notifications
pkg:composer/curly-deni/laravel-notifications
Requires
- php: ^8.3
- laravel/framework: ^11.0||^12.0||^13.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.8
- orchestra/testbench: ^11.0.0||^10.0.0||^9.0.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-arch: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Database notifications for Laravel applications, with configurable table and recipient model, cursor pagination, read/delete operations, deduplication keys, and a creation event.
Installation
composer require curly-deni/laravel-notifications
Publish the configuration and migration, then run the migration:
php artisan vendor:publish --tag=laravel-notifications-config php artisan vendor:publish --tag=laravel-notifications-migrations php artisan migrate
Set the recipient model and table name in config/notifications.php before migrating:
return [ 'user_model' => App\Models\User::class, 'database' => [ 'table' => 'notifications', ], ];
The migration creates a UUID keyed table. Choose a table name that is not already used by another notifications migration.
The default migration uses $table->morphs('notifiable'), which creates a numeric notifiable_id column. If the configured recipient model uses UUID or ULID primary keys, edit the published migration before running it and replace that call with $table->uuidMorphs('notifiable') or $table->ulidMorphs('notifiable'), respectively. The morph column type must match the recipient model's primary key type.
Usage
Add the trait to an Eloquent model that will receive notifications:
use Aesis\Notifications\Traits\HasNotifications; class User extends Authenticatable { use HasNotifications; }
Create notifications through the service. A repeated deduplication key for the same recipient returns the existing notification:
use Aesis\Notifications\Services\UserNotificationService; $notification = app(UserNotificationService::class)->createForUser( $user, [ 'type' => 'order.paid', 'title' => 'Payment received', 'message' => 'Your order has been paid.', 'level' => 'success', 'href' => '/orders/123', ], dedupeKey: 'order.paid:123', );
The service also provides list($user, $cursor = null, $limit = 20), markAsRead($user, $id), delete($user, $id), and deleteAll($user). New records dispatch Aesis\Notifications\Events\UserNotificationCreated after commit.
The notifications:test Artisan command sends a test notification to every model configured in notifications.user_model. Use --yes to skip confirmation and --title, --message, and --level to customize the notification.
Testing and analysis
composer test
composer analyse
composer format
License
This package is open-sourced software licensed under the MIT license.