laravel-auditing, a battle-tested package for audit logging. This reduces reinvention but requires adherence to its model/event-based architecture.HasMany, BelongsTo). Reduces cognitive load for developers familiar with Filament.HasAudit trait (from laravel-auditing).laravel-auditing's default schema (e.g., audits table with auditable_id, event, old_values, etc.).RelationManager interface, minimizing direct model/controller modifications.FilamentAuditingConfig (e.g., excluded fields, custom columns). Example:
FilamentAuditing::configureUsing(function (FilamentAuditingConfig $config) {
$config->excludeFields(['password', 'api_token']);
});
laravel-auditing events (e.g., RetrievingAudit, RestoringAudit) for pre/post-processing.| Risk Area | Mitigation Strategy |
|---|---|
| Schema Mismatch | Validate audit table structure during migration. Use laravel-auditing:install to ensure consistency. |
| Performance | Audits may bloat queries if not paginated/filtered. Plugin includes lazy-loading but test with large datasets. |
| Filament Version Lock | Pin filament/filament and tapp/filament-auditing versions in composer.json to avoid breaking changes. |
| Custom Audit Logic | Abstract audit restoration logic if business rules diverge (e.g., soft-deletes with custom logic). |
| Testing Overhead | Add snapshot tests for audit trails to catch regressions in old_values serialization. |
User, Payment)?Post with 10K audits)?RelationManager overrides.laravel-auditing (no polyfills needed).laravel-auditing).laravel-auditing and configure models:
composer require owen-it/laravel-auditing
php artisan vendor:publish --provider="OwenIt\Auditing\AuditingServiceProvider"
use OwenIt\Auditing\Contracts\Auditable;
use OwenIt\Auditing\Traits\Auditable as AuditableTrait;
class User implements Auditable {
use AuditableTrait;
}
composer.json:
"require": {
"tapp/filament-auditing": "^4.0"
}
php artisan vendor:publish --provider="Tapp\FilamentAuditing\FilamentAuditingServiceProvider"
use Tapp\FilamentAuditing\RelationManagers\AuditsRelationManager;
protected static function getRelations(): array {
return [
AuditsRelationManager::make(),
];
}
RelationManager overrides.old_values:
AuditsRelationManager::make()->columns([
Tables\Columns\TextColumn::make('event')->badge(),
Tables\Columns\TextColumn::make('created_at')->dateTime(),
Tables\Columns\TextColumn::make('changes')
->getStateUsing(fn ($record) => json_diff($record->old_values, $record->new_values)),
]);
laravel-auditing's default audits table.spatie/laravel-activitylog or similar (duplicate audit tables).ResourcePanel (e.g., filament-spatie-laravel-permission).Tag).User, Order, Post).DB::enableQueryLog() checks).audits_archive table).laravel-auditing and filament/filament for breaking changes.laravel-auditing’s table structure may require manual migrations.laravel-auditing adds a deleted_at column, update the plugin’s queries.php artisan schedule:run
// In App\Console\Kernel.php
$schedule->command(AuditArchiveCommand::class)->daily();
HasAudit trait is applied and laravel-auditing is bootstrapped.restoring event listeners.php artisan audit:list (from laravel-auditing).RelationManager logs (enable via config/filament.php).How can I help you explore Laravel packages today?