7   L’unitOfWork

7.1   Au sujet de l’unitOfWork

L’unitOfWork a pour rôle de tracker les changements des objets afin de les persister en base de données.

7.1.1   Fonctionnement interne

L’unitOfWork initialise dans tous les objets « managed » une propriété tingUUID qui ne doit en aucun cas être altérée par l’utilisateur.

Un objet « managed » est un objet qui existe déjà en base et qui provoquera une requête UPDATE lorsque l’on demandera à ce qu’il soit persisté.

7.2   Principe

On demande à l’unitOfWork de persister les données, que ça soit pour une mise à jour, ou une suppression.

On empile généralement les ordres dans la file d’attente de l’unitOfWork puis on lui demande de traiter l’ensemble d’une traite.

$unitOfWork->pushSave($user1);
$unitOfWork->pushSave($user2);
$unitOfWork->pushDelete($user3);
$unitOfWork->process();

7.2.1   Particularités

Que ça soit pour persister la mise à jour ou l’insertion d’une entité il faut utiliser pushSave.

Lors de l’insertion d’une entité, si celle-ci à une propriété de configuré via les metadata en tant que autoincrement alors l’entité aura cette valeur d’initialisé avec l’autoincrement délivré par la base de données.

7.3   Remarques pour les batchs

Lors d’un traitement sur un grand nombre d’objets il est impératif de détacher les objets dont on a plus l’usage afin que l’unitOfWork libère de la mémoire :

$unitOfWork->detach($entity);

On peut aussi détacher tous les objets lorsque ceux-ci ont été persistés :

$unitOfWork->detachAll();