آرش دولتی مهر
2 سال پیش توسط آرش دولتی مهر مطرح شد
6 پاسخ

واکشی اطلاعات چندین آرایه از دیتابیس

در قطعه کد زیر متغییر finder اطلاعلات مدنظرم رو به صورت دست واکشی میکنه و به صورت آرایه نمایش میده مطابق عکس اول اما وقتی همین متغییر رو در کوئری دیگه برای دسترسی فیلد inventory میکنم فقط مشخصات آرایه اول رو نشون میده و اگر بهصورت مثال 50 تا آرایه هم داشته باشم فقط اطلاعات مربوط به آرایه اول که در متغییر finder هست نشون داده میشه و علنا کوئری product_invent همیشه یک خروجی داره و آرایه های بعدی رو نمیخونه که اطلاعاتش رو واکشی کنه ممنون میشم راهنمایی ام کنید .

$finder = DB::table('order_product')->select('order_id', 'product_id', 'count')
                        ->where('order_id', '=', $order->id)->get()->toArray();
                    $collections = collect($finder);
                    $pluck = ($collections)->pluck('product_id');

                    $pluck->all();

                    $product_invent = DB::table('products')->select('inventory')
                        ->where('id', '=', [$pluck])->get();

                    dd($product_invent);

عکس اول از آرایه های موجود :
 تصویر

عکس دوم از خروجی کوئری product_invent :
 تصویر


ثبت پرسش جدید
سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 2 سال پیش آپدیت شد
0

اگر ارایه شما محصولات متفاوت و تعداد متفاوتی داره، فکر کنم اره باید توی همون تیبل محصولات رو با یه حلقه باید اپدیت کنی یا اگر از روش دیگه ی برای کسر خریدها از موجودی استفاده میکنید که اونجا با یک حلقه میتونین تست کنید.


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 2 سال پیش آپدیت شد
0

دسترسی به گوگل ندارم برات سرچ کنم، اگر از پیام شما برداشت درست کرده باشم شما میخوای ارایه خودت رو توی کوئری زدن برروی دیتابیس ایجاد کنید درسته؟

چیزی که یادم میاد اینکه شما با where و استفاده از اون مساوی نمیتونی یک ارایه رو توی یک کوئری فیلتر کنی باید از whereIn استفاده کنی ، شما این تغییراتی که دادم رو تست کن ببین نتیجه رو :

DB::table('products')->select('inventory')->whereIn('id',  ['1','2'])->get()

آرش دولتی مهر
@arashdm2020 2 سال پیش مطرح شد
0

سلام
با whereIn خطای زیر رو میگیرم:
Illuminate\Database\Query\Builder::cleanBindings(): Argument #1 ($bindings) must be of type array, string given, called in /home/arash/Projects/DG-Tork/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php on line 1034
بدازین من یه توضیح بدم شماه آرایه هایی از یک سبد خرید دارید که هر آرایه مشخصه های محصول خریداری شده رو داره از قبیل عنوان و ‍ شناسه محصول و قیمت و تعداد به صورت زیر
{#1357 ▼ +"order_id": 353 +"product_id": 3 +"count": 1 }
{#1363 ▼ +"order_id": 353 +"product_id": 39 +"count": 4 }
که توی مثال بالا ۲ آرایه هست که محدودیتی نداره شاید 1000 تا باشه
میخوام با فیلد product_id این آرایه تعداد موجودی در جدول products فیلد inventory آپدیت بشه یعنی و به ازای هر شماره محصول (product_id) مقدار خرید رو (count) رو از موجودی فیلد (inventory ) جدول products کم کنه .
من این کارو با کد های بالا میکردم اما فقط آرایه اول شناسه محصول رو میگرفت مقدار موجودی در جدول product s رو نشون میده و آپدیت میکنه اما فقط آرایه اول !
بصورت مثال از دو آرایه بالایی فقط کد محصول 4 رو میخونه از جدول products و مقدار موجودیش رو تغییر میده دیگه کاری به آرایه دومی و سومی و ... نداره
امیداوارم درست توضیح داده باشم .


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 2 سال پیش آپدیت شد
0

قبل از اینکه داستان بالا که تعریف کردین رو بهش برسید شما توی کدتون یک کوئری براساس یک ارایه میخوای بزنی اول اینو تست کن خروجی بده

DB::table('products')->select('inventory')->whereIn('id',  $pluck['product_id'])->get()

آرش دولتی مهر
@arashdm2020 2 سال پیش مطرح شد
0

مممنونم ازت واقعا لطف کردی
یه سوال هم داشتم من برای اینکه مقدار inventory که بدست‌آوردم از مقدار سفارش count کم کنم مجدد باید کوئری بزنم ؟


آرش دولتی مهر
@arashdm2020 2 سال پیش آپدیت شد
0

با wherein حل شد ممنونم ازت موضوع الان کسر موجودی هست
$product_invent = DB::table('products')->select('title', 'inventory')
->whereIn('id', $pluck)->get();


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 2 سال پیش آپدیت شد
0

اگر ارایه شما محصولات متفاوت و تعداد متفاوتی داره، فکر کنم اره باید توی همون تیبل محصولات رو با یه حلقه باید اپدیت کنی یا اگر از روش دیگه ی برای کسر خریدها از موجودی استفاده میکنید که اونجا با یک حلقه میتونین تست کنید.


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

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