Comment faire varier la valeur de targetEntity ?

L'entité cible d'une relation n'est pas toujours la même...

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonsoir, Je crois que mon titre est incompréhensible… :)

Je voudrais faire un système d'activité sur un site, dans le style: X a commenté A, Y est ami avec Z, etc…

Je pensais faire une entité qui contiendra les attributs suivants:

  • user: l'utilisateur qui a fait l'action

  • action: série de "verbes" pour décrire l'action (par exemple: A_COMMENTE, EST_AMI_AVEC, A_PUBLIE_UN_ARTICLE…)

  • object: l'objet de l'action (par exemple: le commentaire en question, l'ami en question, l'article en question…)

  • et d'autres, mais qui n'ont pas d'importance ici.

Le souci que je rencontre: vers quoi faire pointer object ? Un coup ce sera une entité Comment, un coup User, une autre fois Article, etc. Comment faire comprendre à Doctrine que cet attribut peut être toutes ces entités à la fois, et surtout pouvoir récupérer l'entité correspondante quand je ferais un $activity->getObject() ?

Si vous pouvez m'éclairer…

Merci d'avance.

+0 -0

Cette réponse a aidé l'auteur du sujet

Salut,

La meilleure façon de faire est à mon avis d'utiliser les mécanismes d'héritage de Doctrine. Tu crées une entité mère dont héritent Comment, Article, User, etc. et c'est cette entité là que tu mets comme targetEntity. Ensuite, grâce au discriminant, Doctrine sera capable de savoir dans quelle table aller chercher les informations puis quelle entité héritée il faut instancier.

Le type d'héritage que te conviendrait le mieux est un Joined je pense. Voici comment il s'utilise : http://doctrine-orm.readthedocs.org/en/latest/reference/inheritance-mapping.html#class-table-inheritance

Bon courage !

“Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.” – Rich Cook

+0 -0

Tu as une partie de l'article qui est consacré aux performances des architectures utilisant ce procédé ("Performance impact").

Pour l'avoir utilisé en pratique avec une entité mère et 11 entités filles, c'est relativement rapide et sur une application qui n'a pas un besoin critique de performance la différence avec un architecture plus simple ne se voit presque pas.

“Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.” – Rich Cook

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte