Have you ever dreamed of having a mechanism in Laravel Nova that would allow you to know if a resource is occupied by another user?
Introducing Nova Resource Busy Field, the first package for Laravel Nova that lets you know if a resource is occupied by another user.
From the secret labs of The3LabsTeam this is a completely opensource package designed to make life easier for those using Laravel Nova as a multi-user CMS.
🌟 Here are some great features:
- It is model-agnostic, you can decide which resource will be considered "occupiable"
- Fully configurable, you can choose the threshold timeout and old logs to be deleted
- It is native to Laravel Nova, there is only one migration to launch
- It is fully reversible, no Laravel Nova models and/or views are touched
- Lets you know from the index of a resource if it is occupied
- Receive an alert if you enter an edit of a busy resource
For install this package, in your composer.json
add the repository:
composer require the-3labs-team/nova-busy-resource-field
You need to publish the migration file:
php artisan vendor:publish --tag=nova-busy-resource-field-migrations
Remember to launch the migrations:
php artisan migrate
Also, you can publish the config file:
php artisan vendor:publish --tag=nova-busy-resource-field-config
First you need to make a model "busiable".
For example, if you want to make the Article model busiable, you need to add the
trait The3labsTeam\NovaBusyResourceField\App\Traits\Busiable
to it:
use The3labsTeam\NovaBusyResourceField\App\Traits\Busiable;
class Article extends Model{
use Busiable;
}
Then, in your Nova resource, you can add the field:
use The3labsTeam\NovaBusyResourceField\NovaBusyResourceField;
public function fields(NovaRequest $request)
{
return [
// ...
NovaBusyResourceField::make('')->withMeta([
'saveEvery' => 30000 // In milliseconds
]),
// ...
];
}
For the best experience, you can delete old records in database.
For this, you need to add in your App\Console\Kernel
, command for delete old records every minute.
$schedule->command('nova-busy-resource-field:run')->everyMinute()->withoutOverlapping();