TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #335 224
فصل چهار - مدل‌ها و Eloquent ORM

بخش نهم - Transaction
s

تراکنش‌ها یا Transactionها برای انجام چندین عملیات پایگاه داده به صورت یکجا استفاده می‌شوند. به عبارت دیگر، اگر همه عملیات موفق باشند، تغییرات به پایگاه داده اعمال می‌شود، اما اگر یکی از عملیات‌ها با خطا مواجه شود، تمامی تغییرات لغو می‌شوند (rollback).

این موضوع به ویژه برای اطمینان از یکپارچگی داده‌ها در سناریوهایی که شامل چندین عملیات هستند مفید است، مانند ثبت چند جدول همزمان، مدیریت تراکنش‌های بانکی و غیره.

لاراول برای مدیریت تراکنش‌ها متدهایی را فراهم می‌کند که در فساد DB قرار دارند.

متد ها عبارتند از:

1- متد beginTransaction برای شروع یک تراکنش.

2- متد commit برای تأیید و ثبت تراکنش.

3- متد rollBack برای لغو تغییرات در صورت بروز خطا.

4- متد afterCommit برای انجام عملیات پس از commit.

مثال:

try {
DB::beginTransaction();

DB::table('users')->insert([
'name' => 'John',
'email' => 'john@example.com',
'password' => bcrypt('1234')
]);

DB::table('profiles')->insert([
'user_id' => 1,
'bio' => 'Test Bio',
'age' => 25
]);

DB::commit();
} catch (\Exception $e) {
DB::rollBack();
echo "Error: " . $e->getMessage();
}


در ابتدا تراکنش با beginTransaction آغاز می‌شود.
دو عملیات insert در جدول‌های مختلف انجام می‌شود.
اگر همه عملیات بدون خطا انجام شوند، با commit تغییرات ثبت می‌شود.
اگر خطا رخ دهد (مانند ارور در هر یک از عملیات)، با استفاده از catch خطا مدیریت شده و rollBack فراخوانی می‌شود تا تغییرات لغو شود.

لاراول همچنین یک متد ساده‌تر و قابل خواندن‌تر به نام transaction ارائه می‌دهد که می‌توان کل تراکنش را در یک Closure قرار داد:

مثال:
DB::transaction(function () {
DB::table('users')->insert([
'name' => 'John',
'email' => 'john@example.com',
'password' => bcrypt('1234')
]);

DB::table('profiles')->insert([
'user_id' => 2,
'bio' => 'Test Bio',
'age' => 30
]);
})


اگر کد داخل transaction موفق باشد، تغییرات به صورت خودکار ذخیره (commit) می‌شود.
در صورت بروز خطا، تغییرات به صورت خودکار لغو (rollback) می‌شوند.

این متد علاوه بر اجرای کد در قالب تراکنش، تعداد دفعاتی که باید در صورت مواجهه با خطا مجدد تلاش کند را می‌پذیرد. این ویژگی برای مواقعی که با عملیات‌های رقابتی روبرو هستید (مانند lockها یا عملیات با احتمال تعارض) مفید است.
DB::transaction(function () {
//
}, 3)


متد afterCommit به شما امکان می‌دهد که یک callback یا عملیات خاص را پس از موفقیت‌آمیز بودن commit اجرا کنید. برای مثال، می‌توانید پس از ذخیره تغییرات، رویدادهایی مثل ارسال ایمیل را انجام دهید.
DB::afterCommit(function () {
echo "Success";
});


می
‌توانید از پارامترهایی برای کنترل تراکنش استفاده کنید. به عنوان مثال، تنظیم چندین تراکنش تو در تو (nested transactions) نیز در لاراول امکان‌پذیر است.

تراکنش‌ها در سناریوهایی مانند عملیات مالی، مدیریت سفارشات یا عملیات‌های مربوط به موجودی کالا اهمیت زیادی دارند. با استفاده از آن‌ها می‌توانید از ناسازگاری داده‌ها و بروز اشکالات جدی در پایگاه داده جلوگیری کنید.

به طور خلاصه، تراکنش‌ها در لاراول به شما امکان می‌دهند عملیات مختلف پایگاه داده را به صورت امن انجام دهید، به طوری که در صورت بروز خطا همه تغییرات برگردانده شود.

▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
💠 @AmirhDeveloper
.
  • 👍 2
  • 🔥 1
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →