11
votes

CakePHP - champ modifié non mise à jour

Des idées sur la manière de déboguer un champ modifié qui n'est pas mis à jour? Le champ créé fonctionne bien.

Je ne suis pas sûr de ce que vous auriez besoin de le regarder, faites-le moi savoir!

merci


0 commentaires

7 Réponses :


1
votes

Ce champ doit être nommé "modifié" avec type "DateTime". Le gâteau doit mettre à jour le champ automatiquement pour vous. Si vous souhaitez vérifier, il suffit de les interroger ou d'examiner la base de données.


0 commentaires

7
votes

Comme ANH Pham a dit, le champ modifié et créé doit être DateTime et ils doivent également avoir une valeur par défaut sur null < / Code>, comme expliqué dans le livre CakePHP sur le sujet . < / p>


2 commentaires

Yeap, ils sont à la fois DateTime et par défaut à NULL. Créé fait fonctionne, cependant, lorsque vous appelez ceci-> Modèle-> Enregistrer () dans la fonction d'édition, il ne met pas à jour le champ modifié.


Vous fournissez probablement ces champs à nouveau dans le formulaire. Ceux ne sont pas autorisés à être présents sous la forme ou sur Enregistrer pour être mis à jour correctement!



0
votes

Le problème peut également survenir si vous utilisez des requêtes de mise à jour manuelle. Le champ est mis à jour uniquement lorsque vous utilisez les fonctions de gâteau.


1 commentaires

J'utilise la fonction modèle-> sauvegarde ().



5
votes

Vous devez essayer de vérifier si vous n'avez pas utilisé

 $this->ModelName->read(NULL, $id); 


0 commentaires

6
votes

Très probablement, vous écrasez le champ, désintérez le champ de l'objet avant de l'enregistrer comme ceci: xxx pré>

Vous pouvez le sauvegarder: p>

$this->User->save($user);


1 commentaires

Ce n'est pas un problème lorsque vous enregistrez des données déjà découvertes de DB, mais c'est vraiment un problème lorsque vous peuplez à partir d'autres sources (session, demande ...).



0
votes

dans Appmodel.php, écrivez simplement le code suivant.

public function beforeSave($options = array())  {
    parent::beforeSave();
    if (isset($this->data[$this->alias]['modified'])) {
        unset($this->data[$this->alias]['modified']);
    }
    if (isset($this->data[$this->alias]['created'])) {
        unset($this->data[$this->alias]['created']);
    }

}


4 commentaires

Cela laissera les champs modifiés et créés comme null dans la base de données, au moins dans ma version du gâteau.


J'ai essayé cela dans Cake 2.x. Quelle version de gâteau utilisez-vous?


J'utilise la version 2.3.1.


Il a été laissé comme NULL dans la DB puisque vous n'avez pas défini le type de colonne sous forme d'horodatage. Si vous utilisez ce type de données pour les colonnes, ceux-ci seront automatiquement mis à jour.



0
votes

J'ai le même problème aujourd'hui et j'ai découvert que le champ modifié est uniquement mis à jour si des modifications ont été apportées , sinon le champ ne sera pas touché.


0 commentaires