danielemontecchi/laravel-userstamps

Automatically track the user who created, updated, or deleted Eloquent models in Laravel, with database macros and model traits.

v1.0.0 2025-05-08 21:17 UTC

This package is auto-updated.

Last update: 2025-05-08 21:18:29 UTC


README

Latest Version on Packagist Total Downloads GitHub Tests Action Status PHPStan Quality Gate Status License: MIT Documentation

Laravel Userstamps is a lightweight, plug-and-play package to automatically track the user who created, updated, or deleted an Eloquent model in Laravel.

Much like Laravel's timestamps() for created_at and updated_at, this package handles the created_by, updated_by, and deleted_by fields in a clean and consistent way.

🛠️ Installation

composer require danielemontecchi/laravel-userstamps

Laravel automatically registers the service provider via package discovery.

⚙️ Usage in Eloquent models

Add the HasUserstamps trait to any model where you want userstamps to be tracked:

use DanieleMontecchi\LaravelUserstamps\Traits\HasUserstamps;

class Post extends Model
{
    use HasUserstamps;
}

The trait automatically listens to Eloquent model events (creating, updating, deleting, restoring) and fills the appropriate *_by fields only if they exist in the database.

🧱 Migration helpers

The package provides expressive migration macros:

➕ Add created_by and updated_by

$table->userstamps();

➕ Add deleted_by (similar to softDeletes())

$table->softDeletesBy();

🧩 Full example

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');

    $table->userstamps();       // created_by, updated_by
    $table->timestamps();       // created_at, updated_at
    $table->softDeletes();      // deleted_at
    $table->softDeletesBy();    // deleted_by
});

👤 User relations

The trait adds inverse relationships to the User model (or whatever model uses the IDs):

$post->creator;    // The user who created the model
$post->updater;    // The user who last updated the model
$post->destroyer;  // The user who deleted the model

🚫 Temporarily disable tracking

You can disable userstamping (e.g. during seeding, bulk import, or testing):

Post::disableUserstamps();

Post::create(['title' => 'Imported without tracking']);

Post::enableUserstamps();

🔧 Requirements

  • PHP 8.1+
  • Laravel 10.x, 11.x, 12.x
  • A users table (or any custom user model)

Note: field names are not hardcoded. The macros can be customized or replaced as needed.

✅ Why this package?

  • ✔️ Laravel-like API: userstamps() and softDeletesBy()
  • ✔️ Zero configuration
  • ✔️ Only acts on existing columns
  • ✔️ Soft delete & restore support
  • ✔️ Great for audits, logs, traceability

License

Laravel Patcher is open-source software licensed under the MIT license. See the LICENSE.md file for full details.

Made with ❤️ by Daniele Montecchi