Bonjour à tous :).
En ce début de vacances de noël, j'ai décidé continuer mon site et j'ai actuellement un problème de liaison entre le model User et le model Groupe voulant faire un système de perm.

User :

<?php
class User extends AppModel {
  var $hasOne = array(       
          'Groupe' => array(   
              'className' => 'Groupe',   
              'foreignKey' => 'id'       
           ) 
    );
    #Règles de validation
    public $validate = array(

        'username' => array(
          array('rule' => 'alphanumeric', 'allowEmpty' => false, 'required' => true, 'message' => 'le pseudo est invalide.'),
          array('rule' => 'isUnique', 'message' => 'ce pseudo existe déjà.')
         ),
        'password' => array( 
          array('rule' => 'notEmpty', 'message' => 'le mot de passe ne doit pas être vide.')
         ),
        'email' => array(
           array('rule' => 'email', 'allowEmpty' => false, 'required' => true, 'message' => 'l\'email est invalide.'),
           array('rule' => 'isUnique', 'message' => 'cet email existe déjà.')
         )
    );
 }

Groupe :

<?php
class Groupe extends AppModel {
        var $hasMany = array(      
          'User' => array(  
                'className' => 'User',    
                'foreignKey' => 'groupe_id'       
                )
         );  
}

Donc comme on le voit je dis bien qu'un utilisateur a 1 groupe et qu'un groupe a plusieurs utilisateurs.
Puis je dis à cake de faire la liaison User.groupe_id -> Groupe.id mais il me fait cette requête ci :

Error: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous
SQL Query: SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`bibliographie`, `User`.`signature`, `User`.`avatar_extension`, `User`.`credits`, `User`.`email`, `User`.`social_heaven`, `User`.`groupe_id`, `User`.`token`, `User`.`activated`, `User`.`created`, `User`.`updated`, `Groupe`.`id`, `Groupe`.`title`, `Groupe`.`color` FROM `users` AS `User` LEFT JOIN `groupes` AS `Groupe` ON (`Groupe`.`id` = `User`.`id`) WHERE `id` = 2 AND MD5(`User`.`password`) = '01ro2se3a6r4ed733cet44a5d0g7727d841' AND `activated` = 1 LIMIT 1
Notice: If you want to customize this error message, create app/View/Errors/pdo_error.ctp

Mais je ne sais pas résoudre, j'ai regarder sur des fofo anglais me disant surement trouver une réponse rapidement mais nada.

Je vous remercie de votre aide d'avance.

2 réponses


aschelch
Réponse acceptée

Bonjour,

L'erreur indique que le champs id est ambigu dans la clause Where. Car la colonne id est présente dans les 2 tables (User et Group) donc SQL ne sais pas laquelle choisir. L'erreur doit venir de ton appel à la fonction find(). Il faut préciser si tu parle de la colonne id de la table User( User.id) ou de la table Group(Goup.id)

Tu doit changer :

$this->User->find('first', array('conditions'=>array('id'=>1)));

par

$this->User->find('first', array('conditions'=>array('User.id'=>1)));

Bonne journée

Dearth
Auteur

C'est exact je te remercie :)