Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-11-2007 10:42:29

vallica
Membre
Date d'inscription: 25-10-2007
Messages: 34

Insert/update rapide avec Zend_db

Bonjour à tous,

Je découvre petit à petit Zend_db et voici ce que j'aimerais faire pour me simplifier un peu la vie :

1) j'ai une table avec les attributs zf_nom, zf_prenom, zf_age

2) j'ai un formulaire dans lequel j'ai nommé mes input en fonction du nom de l'attribut, donc je récupère bien un $_POST['zf_nom'], $_POST['zf_prenom'] et $_POST['zf_age']

3) Je déclare ma Zend_Db_Table_Abstract et ma Zend_Db_Table_Row_Abstract en fonction du nom de ma table, je les lie

4) j'aimerais pouvoir faire un $maRow->setFromArray($_POST); et que Zend_db me fasse la mise à jour des attributs.

Vous me direz, que ca fonctionne, oui c'est vrai mais seulement si dans $_POST j'ai d'autre variables style $_POST['lambda'], j'ai ce genre d'exception qui se lève :

'Zend_Db_Table_Row_Exception' with message 'Specified column "lambda" is not in the row'

Et ce que j'aimerais c'est donc que Zend_db soit capable de se rendre compte que je n'ai pas d'attribut "lambda" dans ma table et que donc il ne cherche pas à l'insérer ou l'update et qu'il ne me lève pas d'exception.

Serais-ce possible ?

Hors ligne

 

#2 27-11-2007 11:25:17

Seb
Membre
Lieu: Thuin (Belgique)
Date d'inscription: 19-11-2007
Messages: 62
Site web

Re: Insert/update rapide avec Zend_db

Je pense qu'il faut que tu crées toi-même un tableau avec uniquement les clés et les valeurs que tu as besoin.

Comme ceci:

Code:

        if ($this->_request->isPost()) {
            Zend_Loader::loadClass('Zend_Filter_StripTags');
            $filter = new Zend_Filter_StripTags();

            $artist = trim($filter->filter($this->_request->getPost('artist')));
            $title = trim($filter->filter($this->_request->getPost('title')));

            if ($artist != '' && $title != '') {
                $data = array(
                 'artist' => $artist,
                 'title'  => $title,
             );
             $album = new Album();
             $album->insert($data);
            
                $this->_redirect('/');
                return;
            }
        }

Dernière modification par Seb (27-11-2007 11:25:50)


Sébastien Bervoets

Hors ligne

 

#3 27-11-2007 11:28:15

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

Re: Insert/update rapide avec Zend_db

utiliser une classe dérivé

Code:

Class Client_Table extends Zend_Db_Table_Abstract {
   protected $_name = 'client';
   protected $_rowClass = 'Client_Row';

   /**
    * Make new row associated to this table.
    *
    * @param StdClass|array $obj OPTIONAL object to cast
    * @return Fast_Db_Row
    */
    public function newRow($obj = null) {
      if ($obj)
      {
         if (is_object($obj))
            $obj = get_object_vars($obj);
         $row = $this->createRow($obj);
      } else {
         $row = $this->createRow();
      }
      return $row;
   }
 }

et

Code:

Class Client_Row extends Zend_Db_Table_Row_Abstract {
   public function add() {
      return $this->_doInsert();
   }

   public function update() {
      return $this->_doUpdate();
   }
}

dans ton controller tu fais

Code:

      $formData = $this->getAllParam();
      $table = new Client_Table();
      $client = $table->newRow($formData);
      $client->add(); // ou ->update()

c'est magique les champs parasites sont supprimées

mais je te conseille d'en passer par des variable de formulaire plus explicite

Code:

<input id='client_name' type='text' name='client[zf_nom]' value='' />
<input id='client_firstname' type='text' name='client[zf_prenom]' value='' />
<input id='client_age' type='text' name='client[zf_age]' value='' />

du coup tu récupère ta variable d'un coup comme ceci

Code:

      $formData = $this->getParam('client');
      $table = new Client_Table();
      $client = $table->newRow($formData);
      $client->add(); // ou ->update()

le tableau formData ne contenant alors que les champs du client

A+JYT

Hors ligne

 

#4 27-11-2007 14:08:22

vallica
Membre
Date d'inscription: 25-10-2007
Messages: 34

Re: Insert/update rapide avec Zend_db

@seb
C'est ce que je faisais en attendant de trouver mieux sur le forum smile

@sekaijin
Merci c'est exactement ce qu'il fallait, et concernant l'astuce du nommage des champs de formulaire, c'est génial je ne connaissais pas !

PS : j'ai lu ton article sur zend_db ce matin, merci très bon article.

Hors ligne

 

#5 28-11-2007 00:27:10

Geoffrey
Membre
Lieu: 63
Date d'inscription: 12-04-2007
Messages: 140
Site web

Re: Insert/update rapide avec Zend_db

vallica a écrit:

PS : j'ai lu ton article sur zend_db ce matin, merci très bon article.

On peut le lire où ?

Hors ligne

 

#6 28-11-2007 08:12:56

Seb
Membre
Lieu: Thuin (Belgique)
Date d'inscription: 19-11-2007
Messages: 62
Site web

Re: Insert/update rapide avec Zend_db

ici si je ne me trompe.


Sébastien Bervoets

Hors ligne

 

#7 28-11-2007 09:18:02

vallica
Membre
Date d'inscription: 25-10-2007
Messages: 34

Re: Insert/update rapide avec Zend_db

Seb a écrit:

ici si je ne me trompe.

Exact

Hors ligne

 

#8 22-02-2008 11:35:05

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: Insert/update rapide avec Zend_db

Ca marche pas chez moi pour le update, j'obtiens tjrs une erreur : The specified Table 'Client_Table' does not have the same primary key as the Row.
Pourtant dans Client_Row et Client_Table j'ai bien $_primary qui est exactement le même.
J'ai un peu regardé le code apparemment ca viens du fait que $_cleanData est vide.
Si je met  true à la place de false ici :  $where = $this->_getWhereQuery(false);     en ligne 455 de Zend_Db_Table_Row_Abstract ca marche.
Je dois faire quelque chose de mal quelque part mais je vois pas j'ai utilisé texto le code de sekaijin.

Dernière modification par Moimeme (04-03-2008 12:13:05)

Hors ligne

 

#9 03-03-2008 08:27:58

Moimeme
Membre
Date d'inscription: 19-04-2007
Messages: 120

Re: Insert/update rapide avec Zend_db

sekaijin tu vois ce qui pourrais clocher ? j'suis en 1.5 c'est peut être ca ...

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