updateOrCreate همیشه انتخاب درستی نیست؟یکی از متدهای محبوب لاراول:
User::updateOrCreate(
['email' => $email],
[
'name' => $name,
'phone' => $phone,
]
);
کد تمیز است، اما پشت صحنه چه اتفاقی میافتد؟
در اکثر موارد، لاراول ابتدا یک
SELECT اجرا میکند تا بررسی کند رکورد وجود دارد یا خیر، سپس UPDATE یا INSERT را انجام میدهد.در پروژههایی با ترافیک بالا، این موضوع میتواند باعث:
❌ افزایش تعداد Queryها
❌ فشار بیشتر روی Database
❌ بروز Race Condition در درخواستهای همزمان (اگر Unique Index نداشته باشید)
اگر با حجم بالای داده یا درخواستهای زیاد سروکار دارید، گزینههای بهتری هم وجود دارند.
برای درج یا بهروزرسانی گروهی، از:
User::upsert(
$users,
['email'],
['name', 'phone']
);
استفاده کنید.
مزایای ()
upsert:✅ اجرای عملیات در یک Query (بسته به نوع دیتابیس)
✅ عملکرد بهتر برای دادههای حجیم
✅ مناسب برای Import و Sync اطلاعات
🎯 متدی که خواناتر است، همیشه سریعترین گزینه نیست.
💡 قبل از انتخاب یک متد، فقط به ظاهر کد نگاه نکنید؛ به تعداد Queryهایی که در Production اجرا میشوند هم فکر کنید.
@CodeVerse_dev