Batch Grouping
Lorsqu'une seule action utilisateur déclenche plusieurs modifications de models, vous souhaitez les voir comme une seule opération logique. AuditChain::batch() regroupe tous les logs d'audit créés dans son callback sous un UUID partagé.
Utilisation
use GrayMatter\AuditChain\Facades\AuditChain; AuditChain::batch(function () { $order->audit('shipped'); $order->update(['status' => 'shipped']); $inventory->update(['quantity' => $inventory->quantity - 1]); }); // Les 3 logs d'audit partagent le même batch_uuid
Chaque log d'audit créé à l'intérieur du callback — qu'il provienne d'événements CRUD automatiques ou d'événements personnalisés — reçoit le même batch_uuid.
Identifiant de batch personnalisé
Par défaut, batch() génère un UUID. Vous pouvez fournir le vôtre :
AuditChain::batch(function () { $order->update(['status' => 'processing']); }, batchId: 'order-42-fulfillment');
Imbrication
Les batches peuvent être imbriqués. Le batch interne obtient son propre UUID, et le batch externe reprend lorsque le batch interne est terminé :
AuditChain::batch(function () { $order->update(['status' => 'shipped']); // UUID du batch externe AuditChain::batch(function () { $shipment->audit('created'); // UUID du batch interne $tracking->audit('assigned'); // UUID du batch interne }); $order->audit('notification_sent'); // UUID du batch externe });
Valeurs de retour
batch() retourne ce que le callback retourne :
$result = AuditChain::batch(function () { return Order::create(['status' => 'pending']); }); // $result est la nouvelle instance Order
Interroger par batch
Retrouvez tous les logs d'audit d'une opération spécifique :
use GrayMatter\AuditChain\Models\AuditLog; AuditLog::where('batch_uuid', $batchUuid)->get();
Note sur la chaîne de hash
Le batch_uuid est intentionnellement exclu du calcul du hash. Il s'agit de métadonnées opérationnelles — modifier le regroupement de vos opérations n'affecte pas l'intégrité de la chaîne.