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