Comment faire varier la valeur de targetEntity ?

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

Le problème exposé dans ce sujet a été résolu.

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.

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 !

+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.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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