2015-10-30 2 views
2

J'utilise Symfony 2 et Doctrine ORMSymfony2 Doctrine - deux relations différentes entre deux entités identiques?

Je veux créer dans mon projet un module avec des posts et des commentaires pour chacun d'entre eux.

J'ai les entités Profile (qui stockent les utilisateurs) et Comments (qui stockent évidemment commentaires)

Je dois créer deux relations différentes entre les mêmes entités.

D'abord besoin de stocker dans Comments entité l'auteur de commentaire (relation 1 à 1). Mais d'autre part, pour chaque commentaire, il faut ajouter les options "j'aime" et "ne pas aimer" que chaque utilisateur peut utiliser. Je suppose que j'ai besoin de plusieurs à plusieurs relations entre Profile et Comment entités qui vont stocker des informations sur l'action j'aime/n'aiment pas.

Je n'ai jamais créé 2 entités avec deux relations différentes entre elles. Avez-vous une expérience avec ça? Ou peut-être que je prends ce problème à tort et que je devrais agir différemment.

S'il vous plaît toute aide ou indice sera apprécié.

Répondre

3

Vous pouvez voir un exemple très similaire dans la documentation de la doctrine des associations:

http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/working-with-associations.html#association-example-entities

Il est assez facile de mettre cela dans votre cas d'utilisation. (Attention: copie non testé & coller le code entrant)

En Profile vous définissez:

/** 
* Bidirectional - Many users have Many liked comments (OWNING SIDE) 
* 
* @ManyToMany(targetEntity="Comment", inversedBy="profileLikes") 
* @JoinTable(name="profile_liked_comments") 
*/ 
private $commentsLiked; 

/** 
* Bidirectional - Many users have Many liked comments (OWNING SIDE) 
* 
* @ManyToMany(targetEntity="Comment", inversedBy="profileDislikes") 
* @JoinTable(name="profile_disliked_comments") 
*/ 
private $commentsDisliked; 

/** 
* Bidirectional - One-To-Many (INVERSE SIDE) 
* 
* @OneToMany(targetEntity="Comment", mappedBy="author") 
*/ 
private $commentsAuthored; 

et Comment vous définissez:

/** 
* Bidirectional - Many comments are liked by many users (INVERSE SIDE) 
* 
* @ManyToMany(targetEntity="Profile", mappedBy="commentsLiked") 
*/ 
private $profileLikes; 

/** 
* Bidirectional - Many comments are disliked by many users (INVERSE SIDE) 
* 
* @ManyToMany(targetEntity="Profile", mappedBy="commentsDisliked") 
*/ 
private $profileDislikes; 

/** 
* Bidirectional - Many Comments are authored by one user (OWNING SIDE) 
* 
* @ManyToOne(targetEntity="Profile", inversedBy="commentsAuthored") 
*/ 
private $author; 

Notez que j'ai changé la relation de Profile-Comment de OneToOne à OneToMany comme je suppose que les utilisateurs devraient être en mesure d'écrire plus d'un commentaire.

+0

Merci pour la réponse, maintenant je lis toute la documentation de Doctrine. J'espère que je n'aurai pas besoin de poser plus de questions dans ce sujet :) –