Ma valeur de débogage est définie sur 2
Et affiche toutes les requêtes, sauf celle dont j'ai besoin.
J'ai une méthode de contrôleur Items
qui appelle cette méthode dans le modèle User
( L'élément appartient à 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é que $email
Et $password
Sont correctement passés dans la fonction (et sont remplis de données légitimes). email
et password
sont les noms des champs du modèle User
.
J'ai également confirmé que sur $this->save()
il renvoie false
, mais lorsque je consulte la page où cela se produit, la requête n'est pas imprimée dans le débogage et aucune erreur n'est levée , donc je n'ai aucune idée de ce qui ne va pas.
Des idées sur la façon dont je peux voir l'erreur ou pourquoi la requête ne semble pas être exécutée?
C'est bizarre, car juste après cela, j'ai un autre modèle qui enregistre les données de la même manière exacte, il se déclenche sans accroc.
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();
}
contient le tableau validationErrors
if ($this->save()) {
return $this->ModelName->id;
}
else {
debug($this->ModelName->invalidFields());
return false;
}
Avez-vous une méthode beforeValidate()
ou beforeSave()
dans le modèle ou le modèle d'application? Si oui, reviennent-ils vrais? A défaut, utilisez un débogueur, définissez un point d'arrêt dans votre méthode IDE en haut de cake/libs/models/model.php save()
et parcourez le code jusqu'à il retourne false. A défaut d'ajouter des appels die('here');
.
Essaye ça:
if ($this->save()) {
return $this->id;
}
else {
var_dump($this->invalidFields());
return false;
}
Assurez-vous de vérifier vos tables:
ID
a-t-il activé l'incrémentation automatique?id
est votre clé primaire?les problèmes d'incrémentation automatique m'ont tué. Un moyen facile de vérifier: si l'une de vos lignes a ID = 0, auto_increment est probablement désactivé.
@cakePHP 3.6: Après avoir enregistré une entité, toute erreur de validation sera stockée sur l'entité elle-même. Il peut lire par la méthode getErrors ().
\Cake\Log\Log::debug($this->ModelName->getErrors());
Si vous avez inclus la bibliothèque
use \Cake\Log\Log;
alors vous pouvez accéder aux erreurs comme ci-dessous:
Example: log::debug($contactRelationship->getErrors());
L'autre situation où CakePHP ne signale aucun $this->Model->validationErrors
Et aucune autre erreur est potentiellement lorsque $this->request->data
N'est pas comme le prévoit Cake et ignore simplement vos données, pas d'enregistrement, aucune erreur de validation. Par exemple, si vos données ont été fournies par DataTables, vous pouvez voir ce format $this->request->data[0]['Model']['some_field']
.
$this->Model->save($this->request->data[0])
fonctionnera cependant.
CakePHP 3.6
$entity = $this->Model->newEntity([
'account_id' => $id,
'gallery_id' => $gallery_id
]);
$result = $this->Model->save($entity);
print_r($entity->getErrors());