temistocle1998/laravel-model-tracker

A Laravel package for tracking model changes, including old values, new values, and the user responsible for the changes

v1.2.2 2024-09-21 12:47 UTC

This package is auto-updated.

Last update: 2024-11-04 09:09:24 UTC


README

Laravel Logo

Laravel Model Tracker

Latest Stable Version Total Downloads License

A lightweight Laravel package to track changes in your models. Automatically logs all changes, including old values, new values, and the user responsible for the changes.

Features

  • Automatically tracks changes in any Eloquent model.
  • Stores old and new values of updated fields.
  • Logs the user who made the change (if authenticated).
  • Provides easy integration with a simple trait.
  • Configurable to exclude fields from tracking.
  • Includes a migration to store logs in a model_changes table.

Requirements

  • Laravel 8.x or 9.x
  • PHP 7.4 or higher

Installation

  1. Install via Composer:

    composer require temistocle1998/laravel-model-tracker
  2. Publish configuration and migration files:

    php artisan vendor:publish --tag=tracker-config
    php artisan migrate
  3. Add the TracksChanges trait to your model:

    In any model where you want to track changes, simply include the TracksChanges trait:

    use Tracker\Traits\TracksChanges;
    
    class Product extends Model
    {
        use TracksChanges;
    }

Configuration

The package comes with a config file that can be customized to suit your needs. The configuration file can be found at config/tracker.php.

Example Config:

return [
    'enabled' => true, // Enable or disable the tracking
    'exclude_fields' => ['password', 'remember_token'], // Fields you don't want to track
];

Usage

Once the package is set up, any changes made to the models using the TracksChanges trait will automatically be logged. The logs are stored in the model_changes table.

Example of Change Logs

When a model is updated, the following log is created in the model_changes table:

Retrieving Model Changes

You can fetch model changes using the ModelChange model.

use Tracker\Models\ModelChange;

// Get all changes for a specific model
$changes = ModelChange::where('model_type', 'App\Models\Product')
                      ->where('model_id', $productId)
                      ->get();

// Display the changes
foreach ($changes as $change) {
    echo $change->changes;
}

Displaying Changes in Your View

You can also display the changes in your views:

@foreach ($product->changes as $change)
    <p>Field: {{ $change['field'] }} | Old Value: {{ $change['old_value'] }} | New Value: {{ $change['new_value'] }}</p>
@endforeach

Contributing

Feel free to submit a pull request if you'd like to contribute to this package. All contributions are welcome!

License

This package is licensed under the MIT License. See the LICENSE file for details.