سلام میخوام اطلاعات رو براساس قیمت مرتب سازی کنم به این صورت جدولم
id price qty
3 2000 1
0 3000 2
5 0 3
میخوام مرتب کنم بار اساس قیمت خب این جاش مشکلی نیست مشکل اینجاست که اگه qty یا price هرکدوم صفر بود بره ته جدول
با این ترتیبی من گذاشتم چه صعودی و چه نزوری باید همون 1 اول باشه
سلام خوب الان شما بر اساس price میخواید مرتب سازی کنید یا بر اساس qty ؟
اطلاعاتی رو در بالا فرستادید میخواید چه شکلی مرتب بشه ؟
@hesammousavi
سلام میخوام براساس price مرتب سازی بشه خب ولی مثلا توی حالت نزولی ممکنه یک محصول قیمتش بالا تر باشه ولی موجود نباشه خب این باید بره ته بشینه نه اول
یا توی حالت صعودی قیمت ممکنه صفر باشه نمیخوام بیاد اول
شما وقتی از الکوئنت یا کوئری بیلدر استفاده کنی.. لاراول برات Instance ی از کلاس Collection رو بر میگردونه.
که میتونی از متد sort استفاده کنی و یه کلوژر بهش پاس بدی و شرطش رو مشخص کنی:
$orders = Order::all();
$orders->sort(function($a, $b) {
if($a->id === $b->id) {
if($a->price === $b->price) {
return 0;
}
return $a->price < $b->price ? -1 : 1;
}
return $a->id < $b->id ? -1 : 1;
});
به این ترتیب اول بر اساس id و بعید بر اساس قیمت اطلاعات سرت میشند.
اگر qty هم برابر با 0 باشه... اصلا منطقی نیست چنین Order ی داشته باشیم. میتونید حذفش کنید.
در نهایت اگر از PHP 7 به بعد استفاده میکنی.. میتونی از Spaceship Operator هم استفاده کنی:
و کد رو بصورت زیر تغییر بدی:
$orders->sort(function ($a, $b) {
return $a->id === $b->id ? $a->price <=> $b->price : $a->id <=> $b->id ;
});
@ali.bayat
سلام خیل ممنون order نیست لیست محصولات وقتی فیلتر میشه اول اونایی رو نشنون بده که هم قیمت دارن و هم موجودی
میشه توی روابط هم استفاده کرد ؟ مثلا
$product->load(['variants' => function ($q) {
$q->sort(function ($a, $b) {
});
یه همچین چیزی
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟