L'ORM Eloquent est très bien, mais je me demande s'il existe un moyen facile de configurer les transactions MySQL en utilisant innoDB de la même manière que PDO, ou si je dois étendre l'ORM pour rendre cela possible ?
Réponses
Trop de publicités?
Pineapple Under the Sea
Points
2936
Si vous n'aimez pas les fonctions anonymes :
try {
DB::connection()->pdo->beginTransaction();
// database queries here
DB::connection()->pdo->commit();
} catch (\PDOException $e) {
// Woopsy
DB::connection()->pdo->rollBack();
}
Mise à jour : Pour laravel 4, le pdo
n'est plus public, donc :
try {
DB::beginTransaction();
// database queries here
DB::commit();
} catch (\PDOException $e) {
// Woopsy
DB::rollBack();
}
Chris
Points
3371
Si vous voulez éviter les fermetures, et que vous êtes heureux d'utiliser des façades, ce qui suit permet de garder les choses propres et agréables :
try {
\DB::beginTransaction();
$user = \Auth::user();
$user->fill($request->all());
$user->push();
\DB::commit();
} catch (Throwable $e) {
\DB::rollback();
}
Si l'une des déclarations échoue, le commit n'aura jamais lieu et la transaction ne sera pas traitée.
Aditya Kresna Permana
Points
151
Si vous voulez utiliser Eloquent, vous pouvez aussi utiliser ceci
Voici un exemple de code tiré de mon projet
/*
* Saving Question
*/
$question = new Question;
$questionCategory = new QuestionCategory;
/*
* Insert new record for question
*/
$question->title = $title;
$question->user_id = Auth::user()->user_id;
$question->description = $description;
$question->time_post = date('Y-m-d H:i:s');
if(Input::has('expiredtime'))
$question->expired_time = Input::get('expiredtime');
$questionCategory->category_id = $category;
$questionCategory->time_added = date('Y-m-d H:i:s');
DB::transaction(function() use ($question, $questionCategory) {
$question->save();
/*
* insert new record for question category
*/
$questionCategory->question_id = $question->id;
$questionCategory->save();
});
imal365
Points
39
- Réponses précédentes
- Plus de réponses