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 ?
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')
];
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 =)
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 ?
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'
)
)
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 =(