devitek / eloquent-loggable
Make your eloquent Model loggable
Installs: 4 333
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 4
Forks: 1
Open Issues: 1
Requires
- php: >=5.4
- laravel/framework: ~5.0
This package is auto-updated.
Last update: 2024-10-24 01:47:23 UTC
README
This package provide a simple way to make your Eloquent's model loggable. It works like the Gedmo/Loggable extension for doctrine.
Installation
Run :
composer require devitek/eloquent-loggable
Into your config/app.php
add the service provider :
'providers' => [
// Other Service Providers
Devitek\Laravel\Eloquent\Loggable\EloquentLoggableServiceProvider::class,
],
Get the migration :
php artisan vendor:publish --provider="Devitek\Laravel\Eloquent\Loggable\EloquentLoggableServiceProvider" --tag="migrations"
and then run :
php artisan migrate
How to use it
In your Eloquent model add :
<?php use \Devitek\Laravel\Eloquent\Loggable; class MyModel extends Model { use Loggable; protected $versioned = [ 'name', 'other_field', 'another_field', 'again_another_field', ]; protected $reason = 'my_reason_field'; }
Now, each time you'll persist your model, all fields that are declared in the versioned
property will be checked (if dirty) and then logged.
The reason property indicates which field will be used to have a log message. It's not required, by default the log message will be empty. This field will be unset before persist so you can use a dynamic field.
Get log entries
You now have a method on your model : logEntries
which is a morphTo relationship.
$logEntries = $model->logEntries(); foreach ($logEntries as $logEntry) { /** * LogEntry object : * action, logged_at, object_id, version, reason, data (as json), user_id */ }
Revert
You can revert your model to a previous state using the revert
method like so :
$model = MyModel::find($id); $model->revert(); // Revert to the first revision $model->revert(5); // Revert to the 5th revision
Enjoy it ! Feel free to fork :) !