Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je cherche plus une explication qu'une solution.
Voila, j'ai une fonction qui m'ajoute une ligne dans une table.
[lang=php] public function saveNewFile($StiId) { $newFile = $this->createRow(); $newFile->FIL_NAME = $_POST['FIL_NAME']; $newFile->FIL_CREATION_DATE = date("Y-m-d"); $newFile->FIL_EXTENSION = $_POST['FIL_EXTENSION']; $newFile->FIL_CREATOR = $_COOKIE["userLogin"]; $newFile->STI_ID = $StiId; $newFile->save(); return $newFile->FIL_ID; }
Tout fonctionne nickel.
Puis je me dit que j'aurais voulu ajouter également un champ taille (c'est une table de gestion de fichiers).
J'ajoute dans ma table mon FIL_SIZE (INT), puis j'ajoute une ligne à ma fonction:
[lang=php] ... $newFile->FIL_EXTENSION = $_POST['FIL_EXTENSION']; $newFile->FIL_SIZE = '20'; $newFile->FIL_CREATOR = $_COOKIE["userLogin"];
Et là j'obtiens une erreur:
"Zend_Db_Table_Row_Exception' with message 'Specified column "FIL_SIZE" is not in the row" !??!!
Par contre, si je fais mon save, puis que j'ajoute ma valeur au champs FIL_SIZE, là tout se passe correctement:
[lang=php] public function saveNewFile($StiId) { $newFile = $this->createRow(); $newFile->FIL_NAME = $_POST['FIL_NAME']; $newFile->FIL_CREATION_DATE = date("Y-m-d"); $newFile->FIL_EXTENSION = $_POST['FIL_EXTENSION']; $newFile->FIL_CREATOR = $_COOKIE["userLogin"]; $newFile->STI_ID = $StiId; $newFile->save(); $newFile->FIL_SIZE = '20'; // Copy/paste de la ligne précédente... $newFile->save(); return $newFile->FIL_ID; }
Est-ce que quelqu'un peut m'expliquer ???
Dernière modification par LeDuc08 (12-04-2011 17:20:12)
Hors ligne
Bonjour,
Il semblerait que le champ FIL_SIZE n'existe pas dans la table en question dans la base de données.
Le save() va exécuter la requête sql, et donc mettre FIL_SIZE = ... si ce champ est assigné avant le save.
Dans le cas contraire, la sauvegarde de la ligne dans la BD se fait, mais pas celle du champ FIL_SIZE qui est juste assigné dans ton objet et donc n'existera plus dès lors que l'objet sera supprimé.
Hors ligne
Bonjour Théocrite,
Merci pour la réponse.
Mais je ne saisi pas tout.
Sachant que la deuxième version du code fonctionne:
- Elle ne renvoie pas d'erreur
- Ma table, et surtout le champ FIL_SIZE est bien renseigné
Cela signifie bien que ma table et le champ FIL_SIZE existent et sont bien référencés.
D'après ce que je sais de l'adaptateur, dans la première version du code, il va faire un INSERT.
--> Celui-ci renvoi une erreur
Dans la seconde version; il fait l'INSERT puis pour le champ FIL_SIZE, il ne va faire q'un UPDATE.
L'UPDATE fonctionne, mais pas l'INSERT, et c'est ça qui me chagrine, je voudrais comprendre pourquoi.
D'avance merci
Hors ligne
Bonjour à tous,
J'allais relancer pour tordre le coup à cette petite bizarrerie, mais avant de poster, je suis retourné dans le code, et j'ai refais un copier coller inverse pour revenir à la version du code qui posait problème et...
Bien vous l'auriez devinez, cela fonctionne désormais avec l'ancien code. !?!
--> Je me demande si le fait de mettre des tabulations entre le nom du champ et le = pour clarifier le code ne m'a pas joué des tours.
Nous ne voyons pas d'autres explications ;-)
Dernière modification par LeDuc08 (12-04-2011 17:19:32)
Hors ligne
Pages: 1