Bonsoir.

Je me retrouve dans un cas assez particulier car je n'ai pas l'impression qu'il a été présenté dans les tutoriels Grafikart.

Quand je tente d'utiliser l'association hasMany je n'obtiens pas le résultat attendu...

Voici ma problématique :
j'ai deux tables 'users' et 'planets' et je tente d'associer les planètes aux utilisateurs. En suivant la logique, un utilisateur a plusieurs planètes, donc j'opte pour hasMany. Pour cela j'ajoute l'association

hasMany = 'Planet']

dans mon model User.

Je veux utiliser GamePagesController pour afficher les planètes de l'utilisateur dans l'action planets.

Mais si dans ma fonction planets je fais :

$this->loadModel('User');
        $planets = $this->User->Planet->find('all');
        debug($planets);

Le debug me renvoit seulement le tableau de la table 'planets' au lieu de me renvoyer comme dans la vidéo de grafikart à 15:50 les tables 'users' et 'planets' de la relation "Un utilisateur à plusieurs planètes".

Je ne sais pas trop comment procéder encore pour la suite mais déjà le fait de bloquer sur ça m'est incompréhensible.
J'ai par ailleurs été voir sur la doc de cakePHP et elle ne m'aide en rien, je préfère encore la leçon de grafikart.

Je suis paumé avec les associations, aidez-moi j'vous en prie. :(

Merci !

2 réponses


Tu fais ta requête sur le model Planet, donc vérifies bien que ton model Planet.php possède bien une relation belongsTo vers User.

Lyks
Auteur

Une planète appartient à un utilisateur. Cette relation est logique. Je ne l'avais pas mise tout simplement car je me contentais de la relation opposée : "Un utilisateur a plusieurs planètes". Il faut donc que je mette les deux associations : hasMany dans User et belongsTo dans Planet ?

Ceci dit... hasMany dans User fout le gros bordel dans mes requêtes sur mon action index dans mon GamePagesController :/
mais si je l'enlève les models ne sont associés plus que dans un seul sens et je ne peux plus faire dans mon GamePages

$this->loadModel('User');
$planets = $this->User->Planet->find('all');

Merci amethyste :)