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 :

récupérer l'id (auto increment) d'un objet que l'on vient de sauver en db


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Par défaut récupérer l'id (auto increment) d'un objet que l'on vient de sauver en db
    Bonjour,

    Je pense que c'est un problème relativement classique mais je n'arrive pas à trouver la "best practice" associée.

    Dans un model j'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $userExercice = new Application_Model_UserExercice();
            $userExercice->setUserId($userId)
                    ->setCurrentQuestionId($questionsId[0])
                    ->setTotalNumberOfQuestions(count($questionsId));
            $userExercice->save();
    L'id de l'objet est fixé par l'auto increment de la base de donnée MySQL.

    Au sein de la même fonction je dois récupérer l'id de cet objet. Normalement j'aurais utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $userExercice->getId();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function getId() {
            return $this->_id;
        }
    Mais l'id n'a jamais été défini pour cet objet.

    Il y a-t-il une autre façon d'obtenir cet id sans avoir à chercher l'enregistrement dans la base de données?

    D'autre part, les attributs que je définis (userId, currentQuestionId, totalNumberOfQuestion) ne sont pas suffisant pour retrouver l'enregistrement dans la base de donnée. Donc cette option n'est pas envisageable.

    J'ai pensé à l'option "retirer l'auto increment" et le gérer à partir de zend mais j'aimerais éviter si il y a une méthode plus propre.

  2. #2
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 496
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 496
    Par défaut
    Salut,

    lastInsertId();

    ?
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Par défaut
    Merci beaucoup çà m'a mis sur la bonne voie.

    Voilà le code final pour ceux qui rencontreront le même problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $userExercice = new Application_Model_UserExercice();
            $userExercice->setUserId($userId)
                    ->setCurrentQuestionId($questionsId[0])
                    ->setTotalNumberOfQuestions(count($questionsId));
            $userExerciceId = $userExercice->save();
    Et le code de la fonction save associée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function save(Application_Model_User $q) {
        $data = array(
            'id' => $q->getId(),
            'difficulty' => $q->getUsername()
        );
     
        if (null === ($id = $q->getId())) {
            unset($data['id']);
            return $this->getDbTable()->insert($data);
        } else {
            $this->getDbTable()->update($data,array('id = ?' => $id));
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] récupérer un champs auto increment
    Par linouchka dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/06/2014, 12h09
  2. Récupérer la valeur d'un champ auto increment dans Firebird
    Par mls dans le forum Bases de données
    Réponses: 11
    Dernier message: 30/09/2009, 19h35
  3. Récupérer la valeur de l'auto increment apres insertion en base
    Par altiman dans le forum Persistance des données
    Réponses: 5
    Dernier message: 02/06/2008, 11h47
  4. [SQL] Récupèrer un identifiant pour l'auto incrementer
    Par klr54000 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 21/04/2007, 15h34
  5. insert et récupérer valeur auto increment
    Par carelha dans le forum Langage
    Réponses: 4
    Dernier message: 27/09/2006, 17h02

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