Dans ma base de données, la gestion des utilisateurs est divisée en deux tables: - Une créée par le plugin symfony sfDoctrineGuard (sfGuardUser), avec le nom d'utilisateur, le mot de passe et autres informations utilisées par le plugin - un autre que j'ai créé pour étendre cette table avec plus de propriétés telles que le prénom, le nom de famille etc ...Comment fusionner deux entités de doctrine dans le même objet
Ce que je veux faire est de rassembler toutes les propriétés des deux tables dans un même objet pour afficher toutes les informations relatives à un membre sur une page spécifique.
Dans ce but, je ne Jointure des deux tables comme ceci:
$q = $this->createQuery()
->from('sfGuardUser u')
->leftJoin('u.Mishmember m WITH u.id = ?', $rel['member_id']);
$member = $q->fetchOne();
Mon problème est que la requête générée semble correcte car il sélectionne tous les attributs des deux tables, mais dans la variable $ membre , Je peux seulement accéder aux propriétés de l'objet sfGuardUser.
Je souhaite que l'objet $ member encapsule toutes les propriétés des objets tables/doctrine.
Comment le feriez-vous?
EDIT1: si je fais un
print_r($member->toArray())
après le code précédent je reçois un tableau à 2 dimensions contenant toutes les propriétés de sfGuardUser dans une première dimension et les propriétés de ma deuxième table dans une seconde dimension. Pour être clair le résultat de print_r est comme:
Array (
[table1-prop1] => value
[table1-prop2] => value
[table1-prop3] => value
[Table2] => Array (
[table2-prop1] => value
[table2-prop2] => value
[table2-prop3] => value
[table2-prop4] => value
)
)
donc d'accéder par exemple la propriété table2-prop3 que je dois faire: $ var [Tableau 2] [table2-prop3];
Ce qui est pas ce que je veux parce que je veux considérer toutes les propriétés dans le cadre de la sameobjet ou un tableau Si vous êtes toujours avec moi (comme s'il n'y avait qu'une seule table.)
le tableau ci-dessus devrait ressembler à:
Array (
[table1-prop1] => value
[table1-prop2] => value
[table1-prop3] => value
[table2-prop1] => value
[table2-prop2] => value
[table2-prop3] => value
[table2-prop4] => value
)
)
Espérons que cela aide à comprendre mon problème.
EDIT2 (réponse à DuoSRX et DrColossos)
Merci aussi pour vos réponses intéressantes.
Eh bien, la raison pour laquelle je préfère ne pas avoir une propriété Mishmember dans mon sfGuardUser est que les deux tables/classes représentent la même entité (l'utilisateur). Bien que cette fragmentation soit inévitable dans ma base de données (il ne serait pas judicieux d'éditer directement le sfGuardPlugin pour ajouter mes propriétés), j'aimerais que le code de l'application soit comme si j'avais une table, parce que ce serait beaucoup plus sensé et logique à utiliser (imaginez qu'un autre développeur ne connaissant pas le modèle devra travailler sur le contrôleur ou les modèles ...)
Que penseriez-vous de l'ajout d'un utilisateur de classe Doctrine héritant de sfGuardUser? et Mishmember (y a-t-il plusieurs héritage dans PHP5?) de sorte que mon contrôleur n'aurait qu'une seule classe d'utilisateurs à gérer?
Il me semblerait beaucoup plus logique de demander à tous les attributs de n'importe quel utilisateur sans prendre la peine de savoir dans quelle table ils sont stockés.
Je ne suis pas sûr de la façon dont fonctionne l'héritage de la doctrine, mais il semble la solution la plus élégante me (s'il vous plaît me dire si je me trompe!)
Je ne suis pas sûr que je suis assez pour s'il vous plaît clair N'hésitez pas à demander quoi que ce soit.
Merci, je viens de répondre en éditant mon poste (EDIT2) –
J'ai également édité ma réponse :) – DuoSRX
Il semble être exactement ce que je cherchais et je m'attendais à ce que ce soit beaucoup plus compliqué. Merci beaucoup! –