Devitek / eloquent-loggable by CaporalDead

Make your eloquent Model loggable
4,315
4
4
Package Data
Maintainer Username: CaporalDead
Maintainer Contact: thomas.sieffert@devitek.fr (Thomas Sieffert)
Package Create Date: 2015-09-16
Package Last Update: 2016-08-20
Language: PHP
License: MIT
Last Refreshed: 2024-11-18 03:05:05
Package Statistics
Total Downloads: 4,315
Monthly Downloads: 148
Daily Downloads: 0
Total Stars: 4
Total Watchers: 4
Total Forks: 1
Total Open Issues: 1

Make your eloquent Model loggable

SensioLabsInsight Latest Stable Version Total Downloads Latest Unstable Version License

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 :) !