Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-04-2009 18:09:19

enjoy
Membre
Date d'inscription: 25-02-2009
Messages: 15

[ZF 1.7] Insert valeur NULL, pour les types date et integer??

Bonjour,
je sais qu'il y a déjà des sujets à ce propos mais je n'ai pas trouvé de réponse qui me satisfasse...

Lorsque je crée ou met à jour un enregistrement dans ma base de données,
tout champ laissé vide étant de type Date dans ma BDD est mis à 0000-00-00 et à 0 pour un type INT malgré les DEFAULT value mis à NULL...

Ca a l'air d'être propre à ZEND...Je comprend quelque part ce comportement, mais vis à vis de l'utilisateur c'est pas très esthétique...

Faut-il manuellement remettre les données en question à NULL ou ya til un autre moyen plus adapté??

Merci

Hors ligne

 

#2 20-04-2009 20:28:47

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [ZF 1.7] Insert valeur NULL, pour les types date et integer??

il ne faut pas mettre de valeur dans le champ du row

lorsque tu positionne la valeur à null ou à zéro (ou avec la valeur vide d'un formulaire)
Zend construit un insert avec un valeur à '' pour le champ or '' c'est en fait \0 soit donc l'entier 0
du coup tu n'utilise pas le défaut à null
il te faut faire un unset avant

Code:

unset($row->date);

du coup le champ n'étant pas présent dans la liste des champs à insérer il ne peu l'être
c'est la valeur par défaut de la base qui fait alors le travail.

A+JYT

Hors ligne

 

#3 21-04-2009 10:17:50

enjoy
Membre
Date d'inscription: 25-02-2009
Messages: 15

Re: [ZF 1.7] Insert valeur NULL, pour les types date et integer??

Merci pour cette réponse, le comportement est  bien celui que je pensais...

Cependant, le problème est comment rendre generique la création de Row à partir d'un formulaire avec cette contrainte??

J'utilise quelque chose de ce genre :

 

Code:

if ($this->_request->isPost()) {
            $formData = $this->_request->getPost();
            if ($form->isValid($formData)) {
                
                $row = $groupes->createRow();

                $row->setFromArray($form->getValues());  

...

Quel est le meilleur moment pour faire la correction???
Ou dois je surcharger la fonction setFromArray??

Hors ligne

 

#4 21-04-2009 10:53:56

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [ZF 1.7] Insert valeur NULL, pour les types date et integer??

dans ta classe row tu surcharge le constructeur qui fait ce qu'il faut
ainsi lorsque tu fais le create row ça exécute ton constructeur
A+JYT

Hors ligne

 

#5 21-04-2009 16:36:24

enjoy
Membre
Date d'inscription: 25-02-2009
Messages: 15

Re: [ZF 1.7] Insert valeur NULL, pour les types date et integer??

Bon je crois avoir réussi, ca a l'air de marcher, je poste la réponse pour faire profiter :

j'ai surchargé la classe Row:

Code:

<?php

class My_Db_Table_Row extends Zend_Db_Table_Row_Abstract
{
    public function setFromArray(array $data)
    {
        $data = array_intersect_key($data, $this->_data);

        foreach ($data as $columnName => $value) {
            if($value==""){
                         $value=NULL;
                        }
            $this->__set($columnName, $value);
        }

        return $this;
    }
}
?>

et ensuite préciser dans mes classes de table cette nouvelle classe Row

Code:

<?php
abstract class  My_Db_Table extends Zend_Db_Table
{
    
protected $_rowClass = 'My_Db_Table_Row';

}
?>

Et voila merci à toi sekaijin...

Dernière modification par enjoy (21-04-2009 16:37:32)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages