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.