L'ORM Eloquent est assez sympa, même si je me demande s'il existe un moyen simple de configurer des transactions MySQL en utilisant innoDB de la même manière que PDO, ou si je devrais étendre l'ORM pour rendre cela possible?
96
Tu peux le faire:
DB::transaction(function() {
//
});
Tout ce qui se trouve à l'intérieur de la fermeture s'exécute dans une transaction. Si une exception se produit, elle sera annulée automatiquement.
Discussed in more detail here
le lien est mort.Si vous n'aimez pas les fonctions anonymes:
Mise à jour : pour laravel 4, l'
pdo
objet n'est plus public donc:la source
DB::beginTransaction()
&DB::commit()
&DB::rollback()
. Ce serait un peu plus propre.DB::connection()->getPdo()->beginTransaction();
DB::transaction
callback est encore plus propre mais l'inconvénient est que si vous devez spécifier différents gestionnaires pour différentes exceptions, vous devrez revenir en arrière pour essayer la technique de captureSi vous souhaitez utiliser Eloquent, vous pouvez également utiliser ce
Ceci est juste un exemple de code de mon projet
la source
question->id
expression lors du rappel de transaction renvoie zéro.Si vous voulez éviter les fermetures et que vous préférez utiliser les façades, ce qui suit permet de garder les choses bien et propres:
Si une instruction échoue, la validation ne fonctionnera jamais et la transaction ne sera pas traitée.
la source
Je suis sûr que vous ne recherchez pas une solution de fermeture, essayez ceci pour une solution plus compacte
la source
Pour une raison quelconque, il est assez difficile de trouver ces informations n'importe où, alors j'ai décidé de les publier ici, car mon problème, bien que lié aux transactions Eloquent, changeait exactement cela.
Après avoir lu CETTE réponse stackoverflow, j'ai réalisé que mes tables de base de données utilisaient MyISAM au lieu d'InnoDB.
Pour que les transactions fonctionnent sur Laravel (ou n'importe où ailleurs), il est nécessaire que vos tables soient configurées pour utiliser InnoDB
Pourquoi?
Citant des documents sur les transactions MySQL et les opérations atomiques ( ici ):
la source
Si une exception se produit, la transaction sera annulée automatiquement.
Format de transaction Laravel Basic
la source