Hello,
J'explique le contexte. Le but est de réaliser une fonction de Follow similaire à Twitter : Les users peuvent se suivre les uns les autres.
Pour ce faire, dans la base de données, j'ai opté pour une table d'association pour faire un self join sur la table principale.
1/ La table Principale : "users" (qui contient toutes les données d'un user)
2/ Une table d'association : "users_users" avec les champs suivants:
- id (en autoincrement)
- following_id (qui contient l'id du user qui est suivi)
- follower_id (qui contient l'id du user qui suit)
Par exemple l'user 2 est suivi par les users 7 et 9, nous donne :
id: 11
following_id: 2
follower_id: 7
id: 12
following_id: 2
follower_id: 9
Je parviens à sauvegarder une entrée de ce type dans la BDD via un clic de l'utilisateur sur un bouton "suivre", mais je ne parviens pas à retrouver avec Find() toutes les données. Je m'exmplique :
Voici la relation que j'importe dans mon modèle User
public $hasAndBelongsToMany = array(
'Following' => array(
'className' => 'User',
'joinTable' => 'users_users',
'foreignKey' => 'follower_id',
'associationForeignKey' => 'following_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
),
'Follower' => array(
'className' => 'User',
'joinTable' => 'users_users',
'foreignKey' => 'following_id',
'associationForeignKey' => 'follower_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
Voici maintenant ma requête dans le UserController pour récupérer la liste des followers d'un user :
//on récupère la liste des followers
public function followers($id) {
$this->User->bindModel(array('hasOne'=>array('UsersUsers')));
$d['followers'] = $this->User->UsersUsers->find('list', array(
'conditions' => array('UsersUsers.following_id' => $id),
'fields' => array('UsersUsers.follower_id')
));
debug($d['followers']); die();
}
Et voici le résultat de ce que je récupère en debug :
array(
(int)11 => '7',
(int)12 => '9'
)
Je récupère bien l'id des followers depuis la table users_users (7 et 9).
En revanche je ne parviens pas à récupérer les données associées à ces id (données de la table users).
J'ai essayé le contain mais je n'y suis pas parvenu.
Une idée pour récupérer les données associées au model parent avec bindModel ?
Merci par avance.