digitalindoorsmen / laravel-actor-trails
Track created_by, modified_by, and deleted_by as JSON objects in your Laravel models, with support for multiple guards and polymorphic actors.
Fund package maintenance!
Clay Bitner
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 2
pkg:composer/digitalindoorsmen/laravel-actor-trails
Requires
- php: ^8.3
- illuminate/contracts: ^11.0||^12.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.8
- orchestra/testbench: ^10.0.0||^9.0.0
- pestphp/pest: ^4.0
- pestphp/pest-plugin-arch: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
This package is auto-updated.
Last update: 2025-12-24 06:47:19 UTC
README
Track created_by, modified_by, and deleted_by as JSON objects in your Laravel models, with support for multiple guards and polymorphic actors.
✨ What It Does
This package automatically tracks who created, modified, or deleted your Eloquent models.
Instead of just storing a raw user_id, it stores a self‑contained JSON object with details about the actor at the time of the action:
{
"id": "16",
"user_type": "Admin",
"auth_table": "users",
"display_name": "Kelly Montannavue"
}
This makes your audit trails:
- Polymorphic → works with multiple authenticatable models (
User,Admin,Member, etc.) - Immutable → keeps a snapshot of the actor’s display name and type, even if the user record changes later
- Automatic → hooks into Eloquent events (
creating,updating,deleting) - Configurable → choose which attributes to store in the JSON
🚀 Installation
You can install the package via composer:
composer require digitalindoorsmen/laravel-actor-trails
Publish the config file:
php artisan vendor:publish --tag="laravel-actor-trails-config"
Generate a migration for a specific table:
php artisan actor-trails:add posts php artisan migrate
This will add created_by, modified_by, and deleted_by JSON columns to the posts table.
⚡ Usage
Add the HasActorTrails trait to any model you want to track:
use DigitalIndoorsmen\LaravelActorTrails\Traits\HasActorTrails; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Post extends Model { use HasActorTrails, SoftDeletes; protected $fillable = ['title', 'body']; }
Now whenever you create, update, or soft delete a Post, the actor will be stored automatically:
$post = Post::create(['title' => 'Hello World']); // Example created_by value: [ "id" => 1, "user_type" => "User", "auth_table" => "users", "display_name" => "Alice" ]
⚙️ Config
The published config file (config/actor-trails.php) lets you define which attributes are stored:
return [ 'attributes' => [ 'id' => fn($user) => $user->getAuthIdentifier(), 'user_type' => fn($user) => class_basename($user), 'auth_table' => fn($user) => $user->getTable(), 'display_name' => fn($user) => $user->name ?? $user->username ?? 'Unknown', ], ];
You can override this per model if needed.
🧪 Testing
composer test
📜 Changelog
Please see CHANGELOG for more information on what has changed recently.
🤝 Contributing
Please see CONTRIBUTING for details.
🔒 Security
Please review our security policy on how to report security vulnerabilities.
👏 Credits
📄 License
The MIT License (MIT). Please see License File for more information.