39 votes

save () retournant false, mais sans erreur dans CakePHP

Mon debug valeur est 2, et c'est l'affichage de toutes les demandes, à l'exception de celui dont j'ai besoin.

J'ai un Items méthode de contrôleur qui est de l'appel de cette méthode dans l' User modèle (Élément belongsTo de l'Utilisateur):

function add_basic($email, $password) {
    $this->create();

    $this->set(array(
        'email' => $email,
        'password' => $password
    ));

    if($this->save()) {
        return $this->id;
    }
    else {
        return false;
    }
}

J'ai confirmé qu' $email et $password sont transmis à la fonction correctement (et sont remplis avec la pièce de théâtre de données). email et password sont les noms des champs dans l' User modèle.

J'ai également confirmé que sur $this->save() il est de retour false, mais quand j'ai vue la page où cela se produit, la requête n'est pas imprimé dans le débogage, et il n'y a pas d'erreur d'être jeté, donc je n'ai aucune idée de ce qui se passe mal.

Des idées sur comment je peut voir l'erreur, ou pourquoi la requête ne semble pas être exécuté?

C'est bizarre, cause juste après cela, j'ai un autre modèle de l'enregistrement des données dans l' exacte même manière, il se déroule sans accroc.

45voto

inkedmn Points 12655

Cela vous donnera probablement les informations dont vous avez besoin (en supposant qu'elles ne soient pas enregistrées en raison de données non valides, bien sûr):

 if(!$this->save()){
    debug($this->validationErrors); die();
}
 

14voto

irwebuniq Points 41

contient le tableau validationErrors

 if ($this->save()) {
    return $this->ModelName->id;
}
else {
    debug($this->ModelName->invalidFields());
    return false;
}
 

10voto

neilcrookes Points 3470

Avez-vous une méthode beforeValidate() ou beforeSave() dans le modèle ou le modèle d'application? Si oui, reviennent-ils vrais? À défaut, utilisez un débogueur, définissez un point d'arrêt dans votre IDE en haut de la méthode cake / libs / models / model.php save() et parcourez le code jusqu'à ce qu'il retourne faux. A défaut, ajouter die('here'); appels.

8voto

TiuTalk Points 3797

Essaye ça:

 if ($this->save()) {
    return $this->id;
}
else {
    var_dump($this->invalidFields());
    return false;
}
 

3voto

na8ur Points 1

veuillez vérifier vos tables: id ont auto_incremet est id primaire

les auto_increment issus m'ont tué. vérification facile: si id = 0 sur une ligne, vous ne pourrez pas être sûr que l'auto_incrément n'est pas défini

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X