Interroger les logs

Chaque model auditable dispose d'une relation morphMany auditLogs. Vous pouvez l'interroger comme n'importe quelle relation Eloquent — filtrer par événement, plage de dates, utilisateur ou toute autre colonne.

La relation auditLogs

// Tous les logs d'audit pour un model
$user->auditLogs;

// En tant que query builder
$user->auditLogs()->get();

La relation retourne des instances du model AuditLog ordonnées par défaut selon la base de données (ordre d'insertion).

Filtrer par événement

// Uniquement les mises à jour
$user->auditLogs()->where('event', 'updated')->get();

// Plusieurs événements
$user->auditLogs()->whereIn('event', ['created', 'updated'])->get();

// Événements personnalisés uniquement
$user->auditLogs()->whereNotIn('event', [
    'created', 'updated', 'deleted', 'restored', 'forceDeleted', 'retrieved',
])->get();

Filtrer par plage de dates

$user->auditLogs()
    ->where('created_at', '>=', now()->subDays(30))
    ->get();

$user->auditLogs()
    ->whereBetween('created_at', [$start, $end])
    ->get();

Filtrer par utilisateur

Retrouvez les modifications effectuées par un utilisateur spécifique :

$user->auditLogs()->where('user_id', $adminId)->get();

Retrouvez les modifications sans utilisateur authentifié (système/console) :

$user->auditLogs()->whereNull('user_id')->get();

Filtrer par batch

Récupérez tous les logs d'une opération batch :

use GrayMatter\AuditChain\Models\AuditLog;

AuditLog::where('batch_uuid', $batchUuid)->get();

Interroger tous les models

Le model AuditLog peut être interrogé directement pour des recherches inter-models :

use GrayMatter\AuditChain\Models\AuditLog;

// Tous les logs d'audit pour un type de model
AuditLog::where('auditable_type', 'App\\Models\\Order')->get();

// Activité récente sur tous les models
AuditLog::where('created_at', '>=', now()->subHour())
    ->orderByDesc('created_at')
    ->get();

// Toutes les modifications par un utilisateur spécifique
AuditLog::where('user_id', $userId)
    ->orderByDesc('created_at')
    ->get();

Accéder aux valeurs

Chaque AuditLog possède ces attributs utiles :

$log = $user->auditLogs()->latest('created_at')->first();

$log->event;                  // 'updated'
$log->old_values;             // ['email' => 'old@example.com']
$log->new_values;             // ['email' => 'new@example.com']
$log->user_id;                // 1
$log->ip_address;             // '192.168.1.1'
$log->user_agent;             // 'Mozilla/5.0 ...'
$log->batch_uuid;             // 'a1b2c3d4-...'
$log->context;                // ['source' => 'admin_panel']
$log->personal_data_accessed; // ['email']
$log->created_at;             // Instance Carbon
$log->hash;                   // Hash SHA-256 (mode complet) ou null (mode léger)

Les colonnes old_values, new_values, personal_data_accessed et context sont automatiquement castées en tableaux.

Relation inverse

Obtenez le model parent depuis un log d'audit :

$log->auditable; // Retourne le User, Order, etc.

Il s'agit d'une relation morphTo standard, le type et l'identifiant du model parent sont donc résolus automatiquement.

Pagination

Pour les journaux d'audit volumineux, paginez comme vous le feriez avec n'importe quelle requête Eloquent :

$user->auditLogs()
    ->orderByDesc('created_at')
    ->paginate(25);