Bonjour,
je souhaite réaliser une relation amis mais je n'arrive pas a le faire en une seule relation dans le modele User.
Si quelqu'un à une idée de la methode à utiliser pour représenter cette relation, ce serait très gentil de sa part de m'éclairer ^_^.

cordialement.

5 réponses


Grafikart
Réponse acceptée

Pour ça que je pense que tu devrais te créer ton propre comportement. Peut être t'inspirer du code de Laravel pour créer un nouveau type de liaison ^^

C'est une relation hasAndBelongsToMany qu'il te faut mais effectivement le côté bilatéral je ne sais pas comment tu peux le faire comprendre au framework.

Bonjour,
le soucis c'est que cela va créer des doublons car si je crée une relation du type:

public function friends()
{
return $this->belongsToMany('User', 'friends', 'user_id', 'friend_id');  
}

et que j'appel

return  User::find($id)->friends;

j'aurais tout les utilisateurs situés dans le champ "friend_id", or je souhaite qu'il me retourne aussi ceux qui sont les amis de l'utilisateur et sont dans le champ "user_id". ( user_id est la personne qui fait la demande et friend_id celui qui la reçoit).
J'ai essayé d'utiliser une union dans la méthode friends mais il me retourne une erreur (il est probable que je m'y prenne mal) .

<table>
  <tr>
    <th>user_id</th>
    <th>friend_id</th>
  </tr>
  <tr>
    <td>1</td>
    <td>2</td>
  </tr>
  <tr>
    <td>3</td>
    <td>1</td>
  </tr>
  <tr>
    <td>3</td>
    <td>2</td>
  </tr>
  <tr>
    <td>4</td>
    <td>1</td>
  </tr>
  <tr>
    <td>1</td>
    <td>5</td>
  </tr>
</table>

Si je demande tout les amis de l'utilisateur 1 avec le code utilisé plus haut, j'aurais 2 et 5 or ce que je chercher a réaliser me retournerais 2,3,4 et 5. Et je voulais savoir si il est possible de le faire en 1 seule relation ou si je dois en créer deux et faire l'union des deux retours avant de renvoyer le resultat.

Oui il va bien faloir, pour le moment je l'ai décomposé en deux partie (asking/asked) et puis on verra a la fin du projet si j'ai le temps de faire quelquechose de propre.