سلام ٍ من داخل تابعی تغییراتی را روی دیتابیس انجام میدم ، بخاطر اینکه مطمئن بشم تغییرات کامل انجام شده و خطایی رخ نداده است از 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 استفاده کنم ؟
شما در کل به صورت زیر می توانید عمل کنید :
try{
DB::beginTransaction();
کدهای شما که تغییراتی در دیتابیس ایجاد می کند
...
...
DB::commit();
}catch(){
DB::roleBack();
}
هر دو متد به یک شکل عمل میکند؟
تفاوتی دارد؟
و اینکه آیا استفاده از تابعی که خودش تغییراتی روی دیتابیس ایجاد میکند داخل این متد در صورت بروز خطا عملیات هایی که انجام شده برگشت میخوره یا خیر؟
کسی نمیتونه راهنمایی کنه ؟
@wozniak @endworld @MrMobin @shift.delete @shift.delete @PWR @magicaldev1 @arminamirinasab @faridaghili
بله به یک شکل عمل میکنه
در قسمت بین beginTransaction و rolleBack هر تغییراتی روی دیتابیس توسط هر فانکشن اصلی یا جانبی انجام شود ، به عقب برگشته ولغو می شود .
میتونید به راحتی این مورد رو تست کنید
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟