سلام دوستان
یه چالشی دارم اینکه اگه بخوام رکوردهارو موقع get کردن با استفاده از ORM لاراول بر اساس یک لیستی از ID ها sort کنم چطور باید اینکارو بکنم؟!!!!!!!
منظورم اینه :
فرض کنید یه جدولی داریم بنام users که داخلش 100 رکورد وجود داره و هر رکورد هم یه ID یونیک داره
ویه آرایه ای از ID هارو هم داریم.
آرایه زیر :
$ids = [4,1,2,3]
حالا من میخوام لیست یوزرهارو بگیرم ولی فقط یوزرهایی که اولا در آرایه ids وجود دارن وثانیا طبق همون ترتیبی که در این آرایه لیست شدن.
User::whereIn('id' , $Ids)->sortBy('id',$ids)->get();
آیا راه حلی به ذهن تون میرسه برای انجام اینکار ؟
پاسخ رو خودم پیدا کردم و اینجا قرار میدم تا کسانیکه به مشکل برخوردن استفاده کنن
برای اینکار دو تا راه حل رو پیدا کردم:
روش اول :
استفاده از تابع sortBy
$users = User::whereIn('id', $Ids)->get()
->sortBy(function($user, $key) use($ids) {
return array_search($user->id, $ids);
});
می تونید برای اطلاعات بیشتر به داکیومنت خود لاراول مراجعه کنید.
فقط توجه داشته باشید که تابع sortBy() باید روی یک کالکشن عمل کنه، به این معنی که تابع get() باید قبل از اون بیاید.
روش دوم :
استفاده از تابع orderByRaw
$ids = [2,1,3];
$ids_ordered = implode(',', $ids);
User::whereIn('id', $ids)->orderByRaw("FIELD(id, $ids_ordered)")->get();
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟