راکت
حل شده

آپدیت موجودی محصولات بعد هر خرید

2 پاسخ

سلام دوستان خسته نباشید
من میخوام بعد از خرید هر کاربر محصولات که در سفارش کاربر هستن موجودی شون آپدیت بشه . سرچ کردم راه هایی که می اورد استفاده از for each بود که برای هر محصول یک درخواست آپدیت استفاده میشد بنظرتون راه بهینه تر هم هست که درخواست ها کمتر بشه؟

محمد
محمد
@mohammad719
ثبت پرسش جدید

پاسخ‌ها

2
محمد
محمد
@mohammad719
بهترین پاسخ

@zparto
ممنون از راهنمایی تون 🌹

دوستان راه حل کهchatGPT گفت

use App\Models\Product;
use Illuminate\Support\Facades\DB;

$productsToUpdate = [
    ['id' => 1, 'decrement' => 2],
    ['id' => 2, 'decrement' => 5],
];

// شروع تراکنش برای اطمینان از اجرای اتمی عملیات
DB::transaction(function () use ($productsToUpdate) {
    // تعریف یک آرایه برای نگهداری شرایط CASE برای هر محصول
    $cases = [];

    foreach ($productsToUpdate as $product) {
        $productId = $product['id'];
        $decrement = $product['decrement'];

        // اضافه کردن شرط CASE به آرایه cases
        $cases[] = "WHEN id = $productId THEN stock - $decrement";
    }

    // تبدیل آرایه cases به رشته با استفاده از implode()
    $casesString = implode(' ', $cases);

    // اجرای کوئری به روز رسانی با استفاده از DB::raw() و CASE
    Product::whereIn('id', array_column($productsToUpdate, 'id'))
        ->update([
            'stock' => DB::raw("CASE $casesString ELSE stock END")
        ]);
});
علیرضا پرتویان
علیرضا پرتویان
@zparto

تخصص: برنامه نویس پایتون

این مشکل n+1 هست سرچ کنید یا از چت جی پی تی کمک بگیرید روش های زیادی برای حلش هست

شاید پاسخ شما همین‌جا باشد

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

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