Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 05-11-2015 09:44:04

RomainG
Membre
Date d'inscription: 10-06-2015
Messages: 65

Transaction et Duplicate Entry SQL

Bonjour à tous,

je suis confronté à un problème que j'ai du mal à comprendre. J'ai une fonction où j'effectue une transaction et lors d'une sauvegarde d'une entité, j'ai une erreur SQL qui me dit que j'ai une duplicate entry pour la clé primaire alors que la table est vide !!!

Voici comment je procède au niveau de cette fonction :

Code:

[lang=php]
// $db est une instance de EntityManager::getConnection()
// Je check les données récupérées. Si elles ne sont pas bonnes ou manquantes => $error = false, sinon $error = true;
$db->beginTransaction();
try {
    // traitements sur les entités
    //...
    // Je récupère une instance de ma classe $m
    if ($m->save($entity) === null) {
        $error = true;
    }
} catch (Exception $e) {
    // je récupère l'exception et je la logge
}
if ($error) {
   $db->rollBack();
} else {
    $db->commit();
}

Mon code au niveau de la fonction save est ni plus ni moins d'un enchainement de persist() et flush() :

Code:

[lang=php]
public function save($entity) {
        $id = null;
        try {            
            $this->_getEm()->persist($entity);
            $this->_getEm()->flush();
            $id = 1;
        } catch (Exception $e) { }
        return $id;
}

L'entity où j'ai ce problème est une entité qui représente une table de liaison entre deux autres entités. Dans ce cas présent, je n'ai pas mappé les liaisons au niveau des deux autres entités, donc théoriquement, doctrine ne devrait pas savoir que cette entité est une "entité de liaison".

Une idée pour résoudre ce problème ?

Merci d'avance,

Romain

Hors ligne

 

#2 05-11-2015 10:16:17

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Transaction et Duplicate Entry SQL

Bonjour,

Si tu as une transaction, et que tu as une erreur de duplicate entry, de ce que je vois dans ton code c'est normal que ta base soit vide puisque tu fait un rollback en cas d'erreur.

Transaction -> Erreur -> rollback -> base vide.

Tu dois identifier a quel moment dans ton code tu gère tes relations. Le problème viens surement d'un index unique, ou d'une clé primaire qui apparaît deux fois.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#3 05-11-2015 11:20:42

RomainG
Membre
Date d'inscription: 10-06-2015
Messages: 65

Re: Transaction et Duplicate Entry SQL

Je me suis mal exprimé !
Quand je fais cette transaction, j'ai, au début, une base vide. Ensuite, la base se remplit bien avec les données que j'injecte dans cette fonction. J'ai cette erreur mais pas de rollback.
Si je commente la ligne incriminée (je l'ai parfaitement identifiée), tout se passe bien.
Ce que je ne comprends pas c'est pourquoi, j'ai cette erreur alors que la base est vide avant la transaction ! On dirait que cette entrée est sauvegardée deux fois mais c'est impossible au vu de mon code...

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