Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-05-2007 14:26:39

golivier
Membre
Lieu: vendée
Date d'inscription: 20-03-2007
Messages: 47
Site web

Champs de type dates

Bonjour,

Savez vous si il existe un moyen avec ZF de spécifier automatiquement le format des dates que l'on souhaite en lecture et qu'il s'occupe de les convertir au format supportée par la base de donnée.

Par exemple, je fait un select -> date au format D/M/Y
je fait un insert avec la date au format D/M/Y et il le converti en Y-M-D pour mysql

Par avance merci
Olivier

Hors ligne

 

#2 16-05-2007 18:32:27

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: Champs de type dates

Oui, en vérité j'oserai dire : tout est possible.
Pour ta question, la logique est :
il faut redéfinir la méthode _fetch de l'adapter, détecter le type de requête, à chaque requête insert/update : analyser les métadata de chaque colonne ( elles sont mises en cache, donc c'est pas lourd niveau base ) via la clé DATA_TYPE du tableau metadata, s'il s'agit d'un colonne de type date, analyser la donnée qu'on veut y insérer, puis la transformer dans le format désiré.

Hors ligne

 

#3 16-05-2007 19:18:55

golivier
Membre
Lieu: vendée
Date d'inscription: 20-03-2007
Messages: 47
Site web

Re: Champs de type dates

merci.

C'est ce que j'ai commencé à faire.

Hors ligne

 

#4 27-06-2007 20:10:32

Ouaibou
Membre
Date d'inscription: 26-06-2007
Messages: 16
Site web

Re: Champs de type dates

Salut,

Je serais vachement intéressé par le code si tu souhaites le partager smile

Merci

Cordialement,
Laurent

Hors ligne

 

#5 27-06-2007 22:52:25

golivier
Membre
Lieu: vendée
Date d'inscription: 20-03-2007
Messages: 47
Site web

Re: Champs de type dates

Bien voilà, c'est du brute de forge car j'ai laissé tomber cette solution (en traitant les infos au cas par cas)

Code:

abstract class TI_DBTable extends Zend_Db_Table {

    /**
     * Fait la liste des champs de type date et dérivés
     * 
     * @return array
     */
    protected function getDateFields() {
       $metadata = $this->info();
       $metadata = $metadata['metadata'];
       $result = array();
       
       foreach ($metadata as $col => $meta) {
          if ((eregi('^date', $meta['DATA_TYPE'])) and ($col!='updated_on') and ($col!='created_on')) 
            $result[]=$col; 
       }
       
       return $result; 
    }
    
    /**
     * Modifie toutes les datesInitialise un tableau de résultat (Fetch)
     */
    protected function convertDateFieldsFromDB(array $fetch) {
       $dateFld = $this->getDateFields(); 
       
       if (count($dateFld)>0) {
           foreach ($fetch as &$row) {
               foreach ($dateFld as $fld) {
                 if (isset($row[$fld])) {
                     $dte = date_parse($row[$fld]);
                     $newDate=$dte['month'].'/'.$dte['day'].'/'.$dte['year'];
                     if (($dte['hour']!=0) or ($dte['minute']!=0) or ($dte['second']!=0)) 
                        $newDate.=' '.$dte['hour'].':'.($dte['minute']<10?'0'.$dte['minute'] : $dte['minute']).':'.($dte['second']<10?'0'.$dte['second'] : $dte['second']);
                     
                     $row[$fld]=$newDate;   
                 }
               }
           }
       }
    }
    
    protected function convertDateFieldsToDB(array $data) {
       $dateFld = $this->getDateFields(); 
       if (count($dateFld)>0) {
          foreach ($dateFld as $fld) {
             if (isset($data[$fld])) {
                 $dte = date_parse($data[$fld]);
                 $newDate=$dte['year'].'-'.$dte['month'].'-'.$dte['day'];
                 if (($dte['hour']!=0) or ($dte['minute']!=0) or ($dte['second']!=0)) 
                     $newDate.=' '.$dte['hour'].':'.($dte['minute']<10?'0'.$dte['minute'] : $dte['minute']).':'.($dte['second']<10?'0'.$dte['second'] : $dte['second']);
                     
                 $data[$fld]=$newDate;   
             }
          }
       }
    }
    
....
/* Il faut utiliser c'est méthodes dans le fetch et surchager aussi le insert() / update() */

Traitement un peu long pour de simple dates ...

Hors ligne

 

#6 28-06-2007 10:08:13

Ouaibou
Membre
Date d'inscription: 26-06-2007
Messages: 16
Site web

Re: Champs de type dates

Ok, super, merci bien smile

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