Utilisation Correcte des Transactions
L'utilisation des transactions de base de données dans Webman est similaire à celle des autres frameworks, voici quelques points à noter.
Structure du Code
La structure du code est la même que celle des autres frameworks, par exemple l'utilisation de Laravel (similaire à think-orm)
Db::beginTransaction();
try {
// .. traitement des affaires...
Db::commit();
} catch (\Throwable $exception) {
Db::rollBack();
}
Il est particulièrement important de noter qu'il faut utiliser \Throwable
et ne pas utiliser \Exception
, car lors du traitement des affaires, Error
peut être déclenché, ce qui n'appartient pas à Exception
.
Connexion à la Base de Données
Lors de la manipulation de modèles dans une transaction, il est particulièrement important de vérifier si le modèle a défini une connexion. Si le modèle a une connexion définie, il faut spécifier cette connexion lors de l'activation de la transaction, sinon la transaction sera invalide (similaire à think-orm). Par exemple :
<?php
namespace app\model;
use support\Model;
class User extends Model
{
// Ici la connexion est spécifiée pour le modèle
protected $connection = 'mysql';
protected $table = 'users';
protected $primaryKey = 'id';
}
Lorsque le modèle a une connexion spécifiée, il faut toujours indiquer la connexion lors de l'ouverture, de la soumission ou du retour en arrière de la transaction.
Db::connection('mysql')->beginTransaction();
try {
// Traitement des affaires
$user = new User;
$user->name = 'webman';
$user->save();
Db::connection('mysql')->commit();
} catch (\Throwable $exception) {
Db::connection('mysql')->rollBack();
}
Recherche des Requêtes avec des Transactions Non Soumises
Parfois, un bug dans le code métier empêche la soumission d'une transaction pour une requête donnée. Pour identifier rapidement quel méthode de contrôleur n'a pas soumis la transaction, vous pouvez installer le composant webman/log
, qui vérifiera automatiquement après la requête si des transactions ne sont pas soumises et enregistrera le journal, avec le mot-clé de journal Uncommitted transactions
.
Méthode d'installation de webman/log
composer require webman/log
Attention
Il faut redémarrer après l'installation, le rechargement ne fonctionne pas.