سلام دوستان خسته نباشید
من میخوام بعد از خرید هر کاربر محصولات که در سفارش کاربر هستن موجودی شون آپدیت بشه . سرچ کردم راه هایی که می اورد استفاده از for each بود که برای هر محصول یک درخواست آپدیت استفاده میشد بنظرتون راه بهینه تر هم هست که درخواست ها کمتر بشه؟
@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
ممنون از راهنمایی تون 🌹
دوستان راه حل که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")
]);
});
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟