Bonjour,
Je souhaite gérer les profils utilisateurs et j'ai trouvé intéressante l'idée d'un livre sur le sujet, à savoir stocker les profils non pas sur une grande ligne avec toutes les colonnes possibles et potentiellement un grand nombre de colonnes vides, mais plutôt gérer comme ceci :
userId key value (avec clé primaire (userId, key))
Ainsi si l'utilisateur rentre son prénom, cela va créer une ligne :
userId prenom monPrenom
J'ai donc configuré mes classes afin, qu'à partir d'un utilisateur, je puisse récupérer un rowset contenant toutes les lignes du profil avec userId celui de l'utilisateur :
Le soucis, c'est que j'aimerais pouvoir passer des données à cette classe (j'ai créé une classe qui hérite de Zend_Db_Table_Rowset_Abstract), et mettre à jour le profil, comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $userProfile = $user->getUserProfile ()
Concrètement, si une des clés du tableau existe déjà dans une des lignes et que la valeur est différente, on met à jour la ligne en question (Zend_Db_Table_Row), autrement on ne fait rien. Si une ligne existe avec comme clé un élément du tableau dont la valeur avec cette clé est vide, cela signifie que l'utilisateur a supprimé cette information de son profil et donc on supprime la ligne. Enfin, si une clé existe dans les valeurs dont il n'existe pas de ligne, on créé une nouvelle ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $userProfile->setData ($dataFromForm); $userProfile->save ();
Les deux premiers cas ne pose pas de problème, mais je n'arrive pas à trouver un moyen propre pour ajouter des lignes dans un rowset. Je peux effectivement faire ceci :
Mais je doute que cette solution soit... très propre, touchant directement aux variables membres de la classe de base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $this->_rows[] = $maNouvelleLigne; $this->_count++;
Y a t-il un moyen propre de faire ce que je souhaite ? Ou alors faut-il mieux revenir à une représentation plus standard des profils utilistaeurs ?
Merci
Partager