Bonjour,
J'ai un petit soucis d'optimisation de mon code concernant doctrine 2 et une relation many to many.
En résumé j'ai une table user, une table groupe et une table pour la relation users_groupes.
Tout est configuré et marche parfaitement y compris le cascade on delete et tout.
Cependant je fait des synchronisation de ces données depuis une source externes. (un annuaire ldap).
Mon soucis est lié a la synchronisation de mes appartenance user <-> groupe.
Avant la mise a jour d'un utilisateur je récupère mon utilisateur en base et ses appartenance a des groupes.
Quelle est la méthode propre pour effectuer la mise à jour des groupes ?
si je fait un clear et un add des nouveaux groupes j'ai des erreurs d'intégrité car il essaye de me reimporter des associations déjà en place.
Pour le moment je suis obliger de boucler 2 fois sur mes données pour faire des add et des removes des groupes qui changent.
Ex :
Même si cela fonctionne je pense qu'il doit y a voir des moyens bcp plus propres pour effectuer cette synchronisation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 $groups = $Data->getGroups(); $buffer = array(); foreach ($groups as $group) { $buffer[$group->getDistinguishedname()]['Data'] = $group; $buffer[$group->getDistinguishedname()]['State'] = 0; } foreach ((array)$user->memberOf as $group) { if (!isset($buffer[$group])) { $temp = $this->getCachedGroupByDn($group); if (isset($temp)) { $Data->addGroups($temp); } } else { $buffer[$group]['State'] = 1; } } foreach ($buffer as $line) { if ($line['State'] != 1) { $Data->getGroups()->removeElement($line['Data']); } }
Partager