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);