Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/11/2010, 12h13   #1
Membre du Club
 
Inscription : mars 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 110
Points : 50
Points : 50
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 :
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 :
$userExercice->getId();
Code :
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.
hackiles est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2010, 12h20   #2
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 245
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 245
Points : 1 502
Points : 1 502
Salut,

lastInsertId();

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

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/11/2010, 17h01   #3
Membre du Club
 
Inscription : mars 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 110
Points : 50
Points : 50
Merci beaucoup çà m'a mis sur la bonne voie.

Voilà le code final pour ceux qui rencontreront le même problème:
Code :
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 :
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));
    }
}
hackiles est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h50.


 
 
 
 
Partenaires

Hébergement Web