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 :

lastInsertId depuis Zend_Db_Table_Abstract


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 94
    Par défaut lastInsertId depuis Zend_Db_Table_Abstract
    Bonjour,

    J'ai eu le petit problème de pouvoir retrouver mon dernier ID inséré avec Zend en utilisant le TableAbstract, j'ai finalement trouvé une solution et j'en ai fait un post sur mon blog.

    Ca pourrait être utile de mettre à jour la FAQ, il me semble qu'il y a eu pas mal d'évolutions depuis sa mise en ligne.

  2. #2
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Mais... La fonction insert de Zend_Db_TableAbstract retourne justement le dernier id inséré. En reprenant ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public function insert(array $aData) {
          $mReturn = parent::insert($aData);
          $this->setLastInsertId($this->getAdapter()->lastInsertId());
          return $mReturn;
       }
    mReturn contient l'identifiant ajouté (en fait, la clé primaire de l'élément ajouté, donc si il s'agit d'un champ auto-increment, il te le renverra).

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 94
    Par défaut
    Tout à fait d'accord, mais mon but était bien d'avoir accès à lastInsertId() autrement que par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $lastInsertId = $this->getDbTable()->insert()
    Il me semblait logique d'avoir le même accès aux méthodes.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 34
    Par défaut
    Bonjour,

    J'ai le même souci que CrazyCat, sa solution (légèrement adaptée) m'a permis de m'en sortir. Donc un grand merci au chat fou !

    Comme je l'ai dit sur le billet, j'ai vraiment du mal à saisir l'intérêt du mapper, même si je me force à l'utiliser. J'ai l'impression que ça alourdit le code (il faut réécrire les fonctions qui sont déjà disponibles par l'adapter) et ça rend le code un peu plus difficile à appréhender, d'autant plus que la doc Zend ne les utilise pas, à part dans le Quickstart. En gros, on apprend une façon de coder, compliquée, et qui n'est plus précisée ensuite ! Je ne saisis pas l'intérêt...

  5. #5
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Et encore, de nombreuses personnes utilisent, en plus des mappers, des services, ce qui alourdit encore plus le code .

    Corrigez moi si je me trompe, mais l'intérêt des mappers est de pouvoir encapsuler tous les appels de la base de donnée (ou d'une autre source) dans une classe dont le but est de ne faire que ça. Ainsi, tu ne pollues pas ton modèle ou ton contrôleur avec des appels de la base de données.

    Ca te permet ainsi d'avoir des contrôleurs plus simples et plus facilement maintenables (imagine que dans toutes tes fonctions du contrôleur tu récupères une ligne de ta base de données et qu'un beau jour, tu sois obligé de modifier la façon dont tu récupères tes données, tu devras modifier le code de TOUTES les fonctions de ton contrôleur. Là, en encapsulant tout ça dans un mapper, tu modifies la façon de récupérer la ligne uniquement dans le mapper).

    Ensuite tu as les services, qui sont encore un niveau d'abstraction plus haut. En gros, dans ton contrôleur, tu feras pas appel à ton mapper mais à un service. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Une fonction d'un contrôleur
    $userService = new Service_User();
    $user = $userService->fetchById(5);
    Ton service va en fait appeler lui même des fonctions du mapper, ce qui ressemblera à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function fetchById($id)
    {
       return $this->_mapper->fetchById($id);
    }
    Sur ce que j'en ait compris, les services te permettent de rajouter encore un niveau d'abstraction afin d'avoir un code très évolutif. Par exemple, si tu souhaites récupérer tes données non pas de ta base de données mais d'un flux qelconque, tu changes juste ton mapper et tu implémentes la fonction fetchById.

    Ton service, lui, restera inchangé, ce qui aura comme effet intéressant que tous tes appels au service (dans tes contrôleurs) ne seront pas modifiés.

    Je ne sais pas si je suis clair, car les services sont encore récents pour moi.

    Après, je suis d'accord avec toi, ça demande un travail bien plus important que simplement dériver de Zend_Db_Table_Abstract (en terme de nombre de fichiers, de lignes de code...), mais en contrepartie c'est vraiment plus flexible et évolutif.

  6. #6
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    Citation Envoyé par CrazyCat Voir le message
    Bonjour,

    J'ai eu le petit problème de pouvoir retrouver mon dernier ID inséré avec Zend en utilisant le TableAbstract, j'ai finalement trouvé une solution et j'en ai fait un post sur mon blog.

    Ca pourrait être utile de mettre à jour la FAQ, il me semble qu'il y a eu pas mal d'évolutions depuis sa mise en ligne.
    quand j'utilise Zend_Db_Table_Abstract, j'ai directement le dernier identifiant dans mon objet sans rien rajouter
    à la création de l'objet, le champ "id" est à NULL et après l'appel de "save", le champ à automatiquement pris la valeur de la clé primaire dans la base de données

Discussions similaires

  1. [CR][VB6] Impression d'un état depuis VB
    Par sda dans le forum SDK
    Réponses: 3
    Dernier message: 06/02/2007, 17h27
  2. Fermer l'animation (swf/exe lancé depuis Windows)
    Par ZiZouJH dans le forum Flash
    Réponses: 3
    Dernier message: 14/01/2003, 10h00
  3. [VB6] Savoir depuis VB, si un document Excel est ouvert
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 08h16
  4. Réponses: 1
    Dernier message: 22/08/2002, 17h00

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