مجید
1 سال پیش توسط مجید مطرح شد
4 پاسخ

کنترل اجرای تابع با tranaction

سلام ٍ من داخل تابعی تغییراتی را روی دیتابیس انجام میدم ، بخاطر اینکه مطمئن بشم تغییرات کامل انجام شده و خطایی رخ نداده است از tranaction استفاده می کنم

public static function test(){
try {
 DB::Transaction(function () use($arg) {
.
.
.
self::function($arg);
.
.
.
   });
            } catch (\Exception $e) {
                return null;
            }
}

تابع function نیز تغییراتی را روی دیتابیس ایجاد می کند که در این تابع فراخوانی میشود.
سوالم این هست در صورت بروز خط در هر جای تابع test یا function، تغییرات روی دیتابیس که در تابع fumction انجام شده نیز برمیکیردد یا اصطلاحا rollback میشه ؟ یا خیر ؟
تغییرات روی دیتابیس به شکلی هست که یا باید کامل انجام به یا کلا انجام نشه
آیا نیاز هست در تابع function نیز از transaction استفاده کنم ؟


ثبت پرسش جدید
woz
تخصص : fan of open source world
@wozniak 1 سال پیش آپدیت شد
0

شما در کل به صورت زیر می توانید عمل کنید :

try{
DB::beginTransaction();
کدهای شما که تغییراتی در دیتابیس ایجاد می کند
...
...
DB::commit();
}catch(){
DB::roleBack();
}

مجید
تخصص : برنامه نویس
@majeeddehghan 1 سال پیش مطرح شد
0

هر دو متد به یک شکل عمل میکند؟
تفاوتی دارد؟
و اینکه آیا استفاده از تابعی که خودش تغییراتی روی دیتابیس ایجاد میکند داخل این متد در صورت بروز خطا عملیات هایی که انجام شده برگشت میخوره یا خیر؟


مجید
تخصص : برنامه نویس
@majeeddehghan 1 سال پیش مطرح شد
woz
تخصص : fan of open source world
@wozniak 1 سال پیش مطرح شد
0

بله به یک شکل عمل میکنه
در قسمت بین beginTransaction و rolleBack هر تغییراتی روی دیتابیس توسط هر فانکشن اصلی یا جانبی انجام شود ، به عقب برگشته ولغو می شود .
میتونید به راحتی این مورد رو تست کنید


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

ورود یا ثبت‌نام