حسن عسکری
حسن عسکری
خواندن ۲ دقیقه·۱ سال پیش

Transaction

ساده بخوام بگم میاد انجام یه عمل رو وابسته به یه عمل یا چند عمل دیگه میکنه یعنی یه عملیات با موفقیت انجام بشه بقیه هم انجام میشه اگه یه دونه خطا بخوره و اعمال نشه بقیه هم اعمال نمیشه

مثلا توی کیف پول , شما میخوای از کیف پول خودتون ۱۰ تتر به کیف پول دوستتون بزنید اگه بعد از کسر پول از کیف پول شما مشکلی پیش بیاد و پول به کیف پول دوستتون اضافه نشه تکلیف اون پول چی میشه؟ پس برای اینکه به این مشکل نخورید بهتره از 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 همه تغییرات اعمال شده رو نادیده میگیره و دیتا بیس به حالت اولیه برمیگرده در نتیجه یا همه عملیات ها با موفقیت انجام میشه یا هیچ کدوم انجام نمیشه

کیف پوللاراوللومنپول
شاید از این پست‌ها خوشتان بیاید