Comment Zend \ Db dans ZF2 contrôle-t-il les transactions?
La ZF1 Zend_Db manuel de référence a un toute la section sur l'exécution de transactions.
La ZF2 Zend\Db manuel de référence manque de documentation sur les transactions.
Comment puis-je effectuer des transactions dans ZF2? Exemple de code serait utile.
source d'informationauteur Greg.Forbes
Vous devez vous connecter pour publier un commentaire.
Le manque de documentation est curieux.
Pour savoir ce qui s'est passé, j'ai dû plonger dans l' Les docs de l'API pour Zend\Db\Adaptateur.
Il ressemble
beginTransaction
rollback
etcommit
sont définis dans Zend\Db\Adaptateur\Driver\ConnectionInterface. Cela signifie qu'ils sont des méthodes appelables sur chaque connexion de l'adaptateur. Malheureusement, la connexion en elle-même est plutôt enterré.Ce que je ne suis pas clair sur -- et ne peuvent pas fournir un exemple à ce moment -- est de savoir quel est l'objet qui vous fait appel de ces méthodes. Dans le pire des cas, il semble que vous voudrez peut-être appeler
$adapter->getDriver()->getConnection()->beginTransaction()
.Eww.
Je suis en espérant que quelqu'un d'autre avec plus de connaissances, et une copie de ZF2 à portée de main, va la voir, et de fournir une meilleure option.
N'oubliez pas que vous pouvez simplement question
BEGIN TRANSACTION
/ROLLBACK
/COMMIT
/SET autocommit=...
SQL vous-même. C'est probablement OK, tant que ça ne ressemble pas à Zend\Db assure le suivi de l'état de la transaction.Vous l'avez. La bonne façon de Commencer, Commit et Rollback Transactions est comme suit:
Juste pour vous dire ce trop vous pouvez également récupérer le Dernier ID créée par:
Si vous utilisez pgSQL vous aurez besoin d'ajouter de la séquence de retour de la Dernière ID créé:
Il y a deux question pour faire la transaction.
1 - MyISAM est pas un moteur transactionnel , le changement des tables de moteur MyISAM.
2 - interrogation de la Transaction(
"START TRANSACTION;"
OU"ROLLBACK;"
) connexion doit être de même avec les autres requêtes(Insert ou Update).Pour ce faire, dans ZF2, vous devriez obtenir de courant adaptateur db et de l'utiliser dans toutes les requêtes.
Ce code ne fonctionnera pas correctement :
Depuis
$this->getAdapter()->getDriver()->getConnection()
Crée de nouveaux db connexion.Utilisez le code suivant à la place:
Pour vérifier si votre connexion est correcte , il suffit d'activer journal de la requête mysql.
Après l'exécution de la requête, vous verrez nombre de connexion avant chaque requête mysql journal.Ceux-ci doivent être la même dans toutes les opérations de requêtes.