ساده بخوام بگم میاد انجام یه عمل رو وابسته به یه عمل یا چند عمل دیگه میکنه یعنی یه عملیات با موفقیت انجام بشه بقیه هم انجام میشه اگه یه دونه خطا بخوره و اعمال نشه بقیه هم اعمال نمیشه
مثلا توی کیف پول , شما میخوای از کیف پول خودتون ۱۰ تتر به کیف پول دوستتون بزنید اگه بعد از کسر پول از کیف پول شما مشکلی پیش بیاد و پول به کیف پول دوستتون اضافه نشه تکلیف اون پول چی میشه؟ پس برای اینکه به این مشکل نخورید بهتره از Transaction استفاده کنید تا این دو عمل وابسته به هم باشن اینجوری اگه عمل اضافه شدن انجام نشه پولی هم کم نمیشه(:
البته Transactionدو نوع سین تکس داره که میتونید استفاده کنید ازش
نوع اول :
DB::transaction(function () {
$user1 = User::find(1);
$user1->update([
'words' => $user1->words - 10000
]);
$user2 = User::find(2);
$user2->update([
'words' => $user2->words + 10000
]);
}, 5);
اگه براتون سوال شده که اون ۵ چیه که به عنوان پارامتر دوم ارسال شده باید بگم سوال خوبیه اون ۵ مشخص میکنه که چند تلاش کنه تا اون کارو یا اون تراکنش رو انجام بده
نوع دوم:
DB::beginTransaction();
try {
$user1 = User::find(1);
$user1->update([
'words' => $user1->words + 10000
]);
$user2 = User::find(2);
$user2->update([
'words' => $user2->words - 10000
]);
DB::commit();
}catch (\Exception $e) {
DB::rollBack();
}
خوب باید براتون بگم که در این روش شما باید اول با beginTransaction یه تراکنش به سمت دیتا بیس رو شروع کنید و جایی که نیاز داشتید از Transaction استفاده کنید با commit کالش کنید و خوب دلیل اینکه توی ترای کچ گذاشته اینه که هر وقت ارور خورد و رفت تو کچ اونجا با rollBack همه تغییرات اعمال شده رو نادیده میگیره و دیتا بیس به حالت اولیه برمیگرده در نتیجه یا همه عملیات ها با موفقیت انجام میشه یا هیچ کدوم انجام نمیشه