tpenaranda/model-log

A Laravel 5 package to automatically log attributes changes on any of your app models.

1.4.1 2019-12-26 03:39 UTC

This package is auto-updated.

Last update: 2024-03-29 02:28:50 UTC


README

Latest Stable Version Total Downloads License

A Laravel package to automatically log attributes changes on any of your app models.

About package

This package is intended for tracking changes of your Eloquent models inside your Laravel application. A new DB table will be created and everytime a model attribute is updated an entry will be automatically created on the DB log table.

Installation

Install package using Composer.

$ composer require tpenaranda/model-log

Run migrations to create ModelLog table.

$ php artisan migrate

[This step is not needed on Laravel >= 5.5] Add service provider and create ModelLog DB table.

Add service provider and alias in config/app.php

    'providers' => [
        ...
        TPenaranda\ModelLog\Providers\ModelLogServiceProvider::class,
    ],
    'aliases' => [
        ...
        'ModelLogEntry' => TPenaranda\ModelLog\ModelLogEntry::class,
        'ObservedByModelLog' => TPenaranda\ModelLog\Traits\ObservedByModelLog::class,
    ],

Run ModelLog command in order to create ModelLog DB table.

$ php artisan model-log:create-log-table

Usage

Add 'ObservedByModelLog' trait to your model and specify attributes you want to observe/track for changes.

use TPenaranda\ModelLog\Traits\ObservedByModelLog;

class MyModel extends Model
{
    use ObservedByModelLog;

    protected $log = ['my_attribute', 'track_this_column_too'];
}

Now after every update on that model, observed attributes will be logged automatically. Use protected $log = 'all'; (notice the string, not array) to log any change.

Retrieve log entries:

$my_model->logEntries;

Advanced usage

Retrieve log entries using query scopes:

\ModelLogEntry::whereModelClass('App\MyModel')->whereAttribute('my_attribute')->whereTo('value_after_change')->get();

Available scopes:

  • whereModel(<object>): Get logs of an specific Eloquent Model (example: get log data of MyModel ID #4).
  • whereModelClass(<string/object>): Get logs for an specific model class (example: get entries where MyModel class is involved, regardless of any IDs).
  • whereAttribute(<string>): Get only logs where some specific attribute was changed.
  • whereFrom(<string>): Get only logs with an specific initial value.
  • whereTo(<string>): Get only logs with an specific end value.
  • ModifiedByUser(<numeric/object>): Get changes done by some specific user. Allowed parameters: null, numeric IDs or User object.

The following scopes only accept Carbon objects as parameters:

  • loggedBefore(<Carbon object>): Retrieve only entries logged prior to specific date.
  • loggedAfter(<Carbon object>): Retrieve only entries logged after specific date.
  • withinDateRange(<Carbon object>, <Carbon object>): Retrieve only entries logged after first parameter and prior to second parameter.

Create (or drop and create) ModelLog table manually:

$ php artisan model-log:create-log-table

Flush ModelLog table:

\ModelLogEntry::flushAll();