Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 20-11-2008 14:48:31

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

metadata apparemment modifiées dans la version 1.7

Bonjour,

Avant d'enregistrer des infos dans ma table j'élimine tous les éléments du formulaire qui ne sont pas des champs dans ma table.

J'utilisait la propriété $this -> _cols qui était générée automatiquement par ZF en faisant :

Code:

public function preparerPourEnregistrement ($infosPost) {
    $this -> infosSQL = array_intersect_key($infosPost, array_flip($this -> _cols));
}

Le petit hic c'est qu'avec la version 1.7 apparemment $this -> _cols n'existe plus.

Savez-vous si elle est accessible ailleurs ou bien est-elle simplement supprimée ?

Merci de vos réponses.

Cordialement,
Kaimite

Hors ligne

 

#2 20-11-2008 14:58:14

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: metadata apparemment modifiées dans la version 1.7

Hello,

Normalement j'ai patché pour la 1.7 : http://framework.zend.com/issues/browse/ZF-2243 , donc tu n'as plus besoin de faire preparerPourEnregistrement.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 20-11-2008 14:58:53

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: metadata apparemment modifiées dans la version 1.7

Je me réponds à moi même...

En modifiant le code de la façon suivante j'ai retrouvé mon $this -> _cols

Code:

public function preparerPourEnregistrement ($infosPost) {
    $this -> info();
    $this -> infosSQL = array_intersect_key($infosPost, array_flip($this -> _cols));
}

Désolé pour le post inutil !

@++ Kaimite

Hors ligne

 

#4 20-11-2008 15:09:23

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: metadata apparemment modifiées dans la version 1.7

Hello,

De plus pour accéder au colonnes, ce n'est pas une bonne pratique d'utiliser $this->_cols directement :

Code:

public function preparerPourEnregistrement ($infosPost) {
    $this -> infosSQL = array_intersect_key($infosPost, array_flip($this ->info(Zend_Db_Table_Abstract::COLS));
}

A+

Dernière modification par mikaelkael (20-11-2008 15:10:13)


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#5 20-11-2008 17:51:11

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

Re: metadata apparemment modifiées dans la version 1.7

moi je fais :
$maTable->createRow($form->getValues()).
Tout est déja prévu dans cette méthode (createRow())

Hors ligne

 

#6 20-11-2008 20:57:44

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: metadata apparemment modifiées dans la version 1.7

Hello,

Ben c'est ça l'objet de l'issue ZF-2243, c'est que createRow et setFromArray() aient le même comportement.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#7 20-11-2008 21:43:16

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: metadata apparemment modifiées dans la version 1.7

Merci pour cette info smile

Je vais regarder cela de suite !

@+ Kaimite

Hors ligne

 

#8 20-11-2008 22:44:26

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

Re: metadata apparemment modifiées dans la version 1.7

Mickael> Excuses, j'ai répondu trop vite. Ce patch est très bon : j'avais remarqué ce comportement il y a quelques mois, bien vu ^^

Hors ligne

 

#9 21-11-2008 22:26:50

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: metadata apparemment modifiées dans la version 1.7

Bonsoir,

Voilà, j'ai teste createRow() :

Code:

$nouvelEnregistrement = $this -> createRow($this -> infosSQL);
$nouvelEnregistrement -> save();

J'obtiens le message suivant :

Cannot refresh row as parent is missing

Mais les informations sont bien enregistrés dans la table

En revanche quand je veux faire une maj j'ai le message suivant :

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2' for key 1

Si vous avez des conseils je suis preneur smile

Bonne soirée

Hors ligne

 

#10 21-11-2008 22:59:13

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: metadata apparemment modifiées dans la version 1.7

Hello,

Pour l'update :

Code:

$row = $table->find($id);
$row->setFromArray($new_data);
$row->save();

Pour ton erreur, après un insert de données, une nouvelle lecture est faite au cas où un trigger est présent. Dans ton cas cette relecture pose problème car ta clé primaire est manquante ou quelquechose comme ça. A cette heure ci je ne m'en rappelle plus wink .

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#11 22-11-2008 09:31:26

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: metadata apparemment modifiées dans la version 1.7

Merci pour cette réponse à une heure tardive smile

Je n'ai pas fait attention au ID car j'avais cru comprendre que createRow() était une méthode "intelligente" qui pouvait detecter un INSERT ou UPDATE...

Selon le bouqin de Julien :

Remarquez que la méthode save() est intelligente. S’il s’agit d’une
modification d’un enregistrement existant, alors elle exécutera une
requête de type update. Dans le cas contraire, une requête insert sera
alors utilisée.

Pour l'autre soucis je vais jeter un p'tit coup d'oeil sur ce qui est fait après l'enregistrement smile

Cordialement,
Kaimite

Hors ligne

 

#12 22-11-2008 09:49:22

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: metadata apparemment modifiées dans la version 1.7

Hello,

Save est une méthode intelligente pas createRow() (c'est bien ce qu'écrit Julien wink ). Son intelligence s'arrête au fait qu'elle va savoir si tu as fait un find() ou un createRow(), elle stocke en interne les données initiales permettant de voir les changements effectués. Si pas de données initiales alors insert, sinon update.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#13 22-11-2008 10:40:52

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: metadata apparemment modifiées dans la version 1.7

oki,

J'ai fait un petit raccourci alors...

Mais j'ai un autre soucis, voici mon code :

Code:

<?php

class Article extends Zend_Db_Table  {
    
    /**
     * Le nom de la table 
     * @var string
     */
    protected $_name = "articles";
    
    
    function enregistrerArticle() {
        if ( !empty($this -> infosSQL) ) {
            //--> TEST INSERT OU UPDATE
            if ( isset($this -> infosSQL['uid']) AND is_numeric($this -> infosSQL['uid']) ) {
                $Enregistrement = $this -> find($this -> infosSQL['uid']);
                $Enregistrement -> setFromArray($this -> infosSQL);
                $Enregistrement -> save();
            }
            else {
                /* pas encore fait */
            }
            return "normalement l'id de l'article enregistré";
        }
        else {
            return false;
        }
    }
    
}

?>

Et j'obtiens le message suivant :

Fatal error: Call to undefined method Zend_Db_Table_Rowset::setFromArray()

Y a surement un truc que je fait pas comme il faut sad

Merci pour votre aide en tout cas smile

Désolé si je patauge mais je suis dans une phase "Je capte plus rien" !

Kaimite

Hors ligne

 

#14 22-11-2008 10:57:14

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: metadata apparemment modifiées dans la version 1.7

Hello,

Remplaces

Code:

$Enregistrement = $this -> find($this -> infosSQL['uid']);

par

Code:

$Enregistrement = $this -> find($this -> infosSQL['uid'])->current();

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#15 22-11-2008 11:11:33

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: metadata apparemment modifiées dans la version 1.7

Merci,

Tu sera mon Dieu du w-e big_smile

Désolé mais j'ai encore mes anciennes logiques smile

Kaimite

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