Ambiguité d'un champs user_id // Systeme d'abonnement -> Formation

Par Bomber, il y a 11 ans


Bonjour, bonsoir,

je suis actuellement la formation cakephp dans la mise en place du système d'abonnement , et de l'abonnement à un animal je récupéère l'erreur suivante :

Database Error
Error: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'user_id' in where clause is ambiguous

SQL Query: SELECT COUNT(*) AS count FROM petsy.subscriptions AS Subscription LEFT JOIN petsy.pets AS Pet ON (Subscription.pet_id = Pet.id) LEFT JOIN petsy.users AS User ON (Subscription.user_id = User.id) WHERE pet_id = 1 AND user_id = 2

J'ai beau chercher je ne trouver pas comment régler ce problème.
La requête correspond exactement à ma demande pourtant =/

voici le code :

public function subscribe($pet_id){ $this->Pet->id = $pet_id; if(!$this->Pet->exists()){ //si cet animal n existe pas throw new NotFoundException(); } $conditions = array( 'pet_id' => $pet_id, 'user_id'=> $this->Auth->user('id') ); $this->loadModel('Subscription'); $count = $this->Subscription->find('count', array( 'conditions'=> $conditions )); if($count > 0){ $this->Session->setFlash('Vous êtes déjà abonné à cet animal', 'flash', array('class'=>'error')); }else{ $this->Subscription->save($conditions); $this->Session->setFlash('Vous êtes désormais abonné à cet animal', 'flash', array('class'=>'succes')); } return $this->redirect($this->referer()); }

Une idée svp ?

5 réponses

amethyste, il y a 11 ans

Dans les liaisons faites par cakephp, il trouve plusieurs champs (dans plusieurs tables) appelés "user_id".
Du coup tu dois préciser le modèle dans tes conditions.

$conditions = [ 'Subscription.pet_id' => $pet_id, 'Subscription.user_id'=> $this->Auth->user('id') ];
Bomber, il y a 11 ans

Merci,
J'avais essayé une première fois, en ne précisant que pour le user_id , et ça m'avait renvoyé un message d'erreur (dont je ne me rappel plus).
Du coup pour les deux ca fonctionne nickel

Merci bien =)

Bomber, il y a 11 ans

En faite mon problème n'est pas résolu finalement;
Car ca me fait bien une nouvelle entrée dans ma table mais pet_id et user_id on la valeur 0 une idée pourquoi ?

amethyste, il y a 11 ans

Oui, pour enregistrer, cakephp attend un format différent de celui que tu lui donnes dans $conditions. Du coup il crée un enregistrement vierge. Voilà le format attendu :

Array ( [NomDuModele] => Array ( [nomduchamp1] => 'valeur' [nomduchamp2] => 'valeur' ) )
Bomber, il y a 11 ans

ca ne fontionne pas non plus : ca me retourne l'erreur

Warning (2): Illegal offset type [APP\Controller\PetsController.php, line xx]

et lorsque je retire les crochets il cherche le champs subscritption =(