2017-09-24 5 views
0

Je veux faire une liste d'amis en utilisant l'auto-référencement ManyToMany. J'ai suivi this link et il semble être bon. Mais maintenant, quelles mesures dois-je avoir dans mon contrôleur à: 1- obtenir tous MyFriends/ou tous les amis de l'utilisateur actuel 2- ajouter un firend, en utilisant un lien comme « Ajouter un ami »Liste d'amis Many To Many avec symfony 3

merci pour votre temps et répond

Répondre

0

dans votre lien mes amis est une collection de tableau de doctrine, pour obtenir les amis d'un utilisateur juste itérer sur elle et d'ajouter un ami vient ajouter un ami sur cette collection et enregistrer l'entité (avec l'entité gestionnaire), vous devrez peut-être ajouter une cascade persistante dans la collection pour ajouter un nouvel utilisateur en tant qu'ami.

vous devez ajouter des méthodes comme getMyFriends, addFriend et removeFriend

<?php 
/** @Entity */ 
class User 
{ 
    // ... 

    /** 
    * Many Users have Many Users. 
    * @ManyToMany(targetEntity="User", mappedBy="myFriends") 
    */ 
    private $friendsWithMe; 

    /** 
    * Many Users have many Users. 
    * @ManyToMany(targetEntity="User", inversedBy="friendsWithMe") 
    * @JoinTable(name="friends", 
    *  joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@JoinColumn(name="friend_user_id", referencedColumnName="id")} 
    *  ) 
    */ 
    private $myFriends; 

    public function __construct() { 
     $this->friendsWithMe = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->myFriends = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    public function getMyFriends(){ 
     return $this->myFriends; 
    } 

    public function addFriend(User $friend){ 
     $this->myFriends->add($friend); 
    } 

    public function removeFriend(User $friend){ 
     $this->myFriends->removeElement($friend); 
    } 
} 

dans votre contrôleur, vous devez mettre en œuvre une action avec

$currentUser= $this->get('security.context')->getToken()->getUser(); 
$myFriends = $currentUser->getMyfriends(); 
$this->render('your-template.html.twig', array(
    'myFriends' => $myFriends, 
)); 

et dans votre modèle de brindille

<h1>My friends</h1> 
<ul> 
    {% for friend in myFriends %} 
     <li>{{ friend.username }}</li> 
    {% endfor %} 
</ul> 
+0

Dans ma base de données, j'ai une nouvelle table qui contient user_id et friend_user_id. Mais je n'ai pas d'entité nommée "ami" dans mon code source. – Patron

+0

c'est une relation auto-référencée vous n'avez pas une entité ami c'est utilisateur mais maintenant dans votre entité utilisateur vous avez un champs amis qui est une collection d'utilisateurs –

+0

est-ce que c'est bon pour vous? –