سلام دوستان
تو جدول تنوع محصولات یه ستون دارم بنام نام دسته محصول (cat_id) و ستون دیگه بنام تعداد موجودی تنوع (balance)
حالا میخام بر اساس گروه بندی در لاراول جدول تنوع رو بر اساس ستون cat_id گروهبندی کنه ولی تو گروه بندی میخام اونی که موجودی داره رو تو گروهبندی شرکت بده نه به ترتیب ستون id
مثلا من سه تا تنوع محصول دارم بنام
تیشرت آبی (موجودی صفر )
تیشرت زرد (موجودی 3 تا )
تیشرت سفید (موجودی 5 تا )
که هر سه تای اینا cat_id شون مثلا 444 هست
وقتی میام میگم این سه تا بر اساس cat_id گروهبندی کن میره تو گروهبندی تیشرت آبی رو بصورت پیشفرض به عنوان نماینده فاکتور میکنه اونم چون از نظر کلید اصلی نسبت به بقیه اولیوت داره اینکارو میکنه
هر کاری کردم که بهش بگم آقا یا تیشرت زرد و یا تیشرت سفید که موجودی دارند و به عنوان نماینده این گروه گروهبندی کن نمیکنه و نتونستم
نمیخام شرط بزارم که اول محصولاتی که موجودی دارند رو لحاظ کن بعد گروهبندی کن !!! چون اونطوری نمیتونم به مشتری بگم از این رنگم داریم ولی دیگه موجودیش تموم شده
فقط میخام بگم اونی که موجودی و داره رو نشون بدم تو سایت بعد رفت تو جزئیات محصول وقتی تیشرت آبی رنگ و انتخاب کرد بهش میگم موجودی نداره
ممنون میشم از دوستانی که تجربه دارند کمکم کنید
سپاس
@hussain2
@mahdi.nazari
@salar.mohammad2013
@Raymond
@alirezakefayati
@hesammousavi
@ali.bayat
@ossvahid
@khanzadimahdi
@it1press
@amata
@mhyeganeh
دوست عزیز سلام
یه کوچولو در درک جدولت به مشکل خوردم و اگر این دو سه جدول مرتبط به هم رو بزاری و فیلد های مهمی که مربوط میشه رو هم بزاری و بقیش الکی نقطه چین کنی عالی میشه که دقیق تر درک کنم روابط رو
اما من طبق تجربه ای که خودم توی همچین موردی داشتم برای انجام موجودی محصولات و دسته بندی اونها مجبور بودم اول از چند جدول مختلف گردش کالا رو بگیرم و جمع ببندم چون به صورت فیلد محاسباتی هست و توی ستون نبود
مجبور بودم مثلا سه خط مختلف کد بزنم و درخواست داشته باشم
مثلا توی یک بخش از کدم میومدم همه ی محصولاتم رو با دسته بندی و ساختار مربوط به خودشون و موجودی دریافت میکردم
این فقط به من محصولات رو با همه ی وابستگی هاش میداد
حلا دیگ ارتباط دیتابیسی ندارم همه داده هام پیشمه
همه ی دسته بندی ها رو جدا میکردم توی یک کالکشن
همه ی ساختارام رو هم جدا میکردم توی یک کالکشن
مثلا محصولات من به شکل زیر بود
$menus=Menu::with(['structure.shelves','partProducts.materials','category'])
->where('is_disabled',false)
->orderBy('menus.ordering')
->get();
بعد دسته بندی و ساختارم رو بر میداشتم از همین محصولات
$categories=$menus->pluck('category')->sortBy('ordering')->unique();
$structures=$menus->pluck('structure')->sortBy('ordering')->unique();
حالا با چند حلقه بر اساس دسته بندی میومدم محصولاتم رو راحت where میکردم چون از نوع collection هستن همه
و یه فیلد هم برا خودم روی دسته بندی میزاشتم ک اگر دسته ای همه ی محصولات توش موجودی نداره اصلا اون دسته رو اضاف نکن برام
if ($has_stock){
$menusCollected[]=[
'menuInfo'=>$menu->toArray(),
'partProductsWithCount'=>$partProductsCollectedWithCount,
'availableCount'=>$countMenuAvailable,
];
}
حالا اگ دلت بخاد نشون بدی اونی که موجودی داره یا نداره
یا مرتبش کنی
یا هر کاری کنی دستت بازه جون داده هات جلوته و نیاز به کوئری به دیتابیس نداری اصلا همش توی رمه
سلام دوست من 🖐
امیدوارم حالت خوب و عالی باشی✨
برای انجام این کار در Laravel، میتونی از عبارت groupBy
به همراه having
استفاده کنی تا محصولات را بر اساس cat_id
گروهبندی بکنه و سپس با استفاده از SUM
و CASE
، تعداد موجودی را برای هر گروه محاسبه کنی و فقط گروههایی را انتخاب کنی که تعداد موجودی بیشتر از صفر دارن.
مثال زیر چگونگی کارو نشونت میده
$products = DB::table('products')
->select('cat_id', DB::raw('SUM(CASE WHEN balance > 0 THEN 1 ELSE 0 END) AS available_count'))
->groupBy('cat_id')
->having('available_count', '>', 0)
->get();
در این مثال، ما تعداد موجودیهای مثبت را برای هر cat_id
حساب میکنیم و سپس با استفاده از having
، فقط گروههایی را انتخاب میکنی که تعداد موجودی مثبت دارن (بیشتر از صفر).
حالا میتوانید از متغیر $products
برای نمایش اطلاعات در سایت خود استفاده کنی و محصولاتی که موجودی دارند را به عنوان نماینده گروه نمایش بدی .
امیدوارم پاسخم بهت کمک کرده باشه ❤️
موفق و پیروز باشی 🤘🌹
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟