This package provide a simple way to make your Eloquent's model loggable. It works like the Gedmo/Loggable extension for doctrine.
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
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.
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
*/
}
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 :) !