IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

Question sur la partie Zend_Db du quick start zend


Sujet :

Zend_Db PHP

  1. #1
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut Question sur la partie Zend_Db du quick start zend
    Bonjour à tous,

    J'ai une ou deux question à vous poser sur la section Zend_Db du quick start ZF. : http://framework.zend.com/manual/en/...ate-model.html

    Ma première question est que fait réellement la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    zf configure db-adapter
    Dans leur exemple il crée un Guestbook, pour ce faire il crée un table et trois class dans modèle :

    - class Application_Model_DbTable_Guestbook extends Zend_Db_Table_Abstract
    - class Application_Model_Guestbook
    - class Application_Model_GuestbookMapper

    Pour la première et la deuxième pas de problème mais pour la troisième dans le cas ou j'ai plusieurs tables est ce que j'aurais plusieurs class Mapper ?

  2. #2
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    La commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    zf configure db-adapter
    crée la ressource de connexion à la base dans le fichier application.ini !

    Par contre toujours le flou sur l'utilisation de la class mapper, je me rends bien compte que certaine méthodes ne bougent pas d'une class mapper à l'autre. Peut être je pourrais faire une class parente avec ces méthodes et en faire hériter les autres ?

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Bonjour,

    dans la classe Application_Model_GuestbookMapper deux à deux méthode générique :
    - setDbTable
    - getDbTable

    Tu peux passer en paramètres, n'importe quelle tables.

    Par contre pour save,find,fetchAll, tu vois bien qu'il travaille avec les champs d'une tables spécifique, donc c'est méthodes ne sont pas réutilisable. tu peux également si tu le veux ne pas utiliser le mapper et créer tes méthodes dans ton fichier Model.

  4. #4
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Merci pour ta réponse MaitrePylos, j'aimerai donc comprendre quel est l'intêret de créer une class mapper.

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Simplement pour traiter les données plus approfondies, que ce que pourrais offrir Zend_Entity

  6. #6
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Qu'est ce que tu veux dire par " traiter les données plus approfondies "

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Si je prend l'exemple de la méthode save()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
      public function save(Application_Model_Guestbook $guestbook)
     
        {
     
            $data = array(
                'email'   => $guestbook->getEmail(),
     
                'comment' => $guestbook->getComment(),
     
                'created' => date('Y-m-d H:i:s'),
     
            );
     
     
     
            if (null === ($id = $guestbook->getId())) {
     
                unset($data['id']);
     
                $this->getDbTable()->insert($data);
     
            } else {
     
                $this->getDbTable()->update($data, array('id = ?' => $id));
     
            }
     
        }
    On voit ici qu'on fait un traitement des données, cette méthode est réécrite dans dans ZF la méthode save est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public function save()
        {
            /**
             * If the _cleanData array is empty,
             * this is an INSERT of a new row.
             * Otherwise it is an UPDATE.
             */
            if (empty($this->_cleanData)) {
                return $this->_doInsert();
            } else {
                return $this->_doUpdate();
            }
        }
    En gros cela faite la même chose, mais dans la mapper on voit par exemple qu'il crée une date, je pourrais mettre en majuscule...;bref le traitement que je veux

  8. #8
    Membre du Club Avatar de erehcab
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 215
    Points : 57
    Points
    57
    Par défaut
    Désolé Maitre Pylos mais je re lance un tout petit peu le sujet car j'aimerai savoir comment tu fonctionnes lorsque tu utilises cette structure pour gérer des jointures entre tables.

    Pour le moment j'ai créé une méthode dans ma table mapper qui récupère les informations des autres tables jointes par une requête.

    Est ce la bonne solution pour traiter les jointures ?


    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class Application_Model_PhotosMapper
    {
     
    ...
           public function findAll ($idUser)
          {
                $this->getDbTable()
            	  ->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
    	          ->setIntegrityCheck(false)
                      ->join('item', 'photo.id_photo = item.id_Photo')
                      ->join('article', 'article.id_article = item.id_article')
                      ->join('marque', 'marque.id_marque = article.id_Marque')
                      ->where('photo.id_Utilisateur = ?', (int) $idUser)
                      ->order('photo.id_photo');
          }
     
    ...
     
    }

  9. #9
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 497
    Points : 12 600
    Points
    12 600
    Par défaut
    Certainement, mais je ne sais pas t'aider,car je n'utilise pas Zend_Db de cette façon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    public function findAll($id){
     
    $sql = "SELECT * FROM maTable 
    INNER JOIN autreTable
    ON maTable.id = autreTable.id
    WHERE maTable.id = ? ";
     
    return $this->db->fetchAll($sql,$id);
    }

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/05/2013, 12h33
  2. Quelques questions sur quick report
    Par ndsaerith dans le forum Delphi
    Réponses: 3
    Dernier message: 14/03/2007, 10h37
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo