دسته بندی نتایج در لاراول بر اساس روز ماه سال

تو این نوشته ما می خواهیم یک لیست به همراه گروه بندی آنها بر اساس یک مقدار تاریخ، مثل روز، ماه، سال یا غیره داشته باشیم:

به مثال توجه کنید، این دیتابیس روی جدول appointments وجود دارد.


حالا طبق جدول بالا، می خواهیم نزدیک ترین appointmentsهای ۷ روز آینده را برای هر روز داشته باشیم، مانند:


طبق خواسته بالا، کد به شرح زیر باید باشد:


$days = Appointment::whereBetween('start_time', [now(), now()->addDays(7)])
    ->orderBy('start_time')
    ->get()
    ->groupBy(function ($val) {
        return Carbon::parse($val->start_time)->format('d');
    });

foreach ($days as $day => $appointments) {
    echo '<‌h2‌>'.$day.'<‌/h2‌><‌ul‌>';
    foreach ($appointments as $appointment) {
        echo '<‌li‌>'.$appointment->start_time.'<‌/li‌>';
    }
    echo '';
}

توضیحات کوتاهی درباره کد:

1- “نکته” اصلی: استفاده از کالشکن groupBy برای بدست آوردن لاجیک مورد نیاز. groupBy(function ($val) { … را ببینید.

2- در داخل groupBy ما همچنان به Carbon::parse() نیاز داریم.

3- همچنین از متد کمکی now() برای ساخت تاریخ ها در builder استفاده می کنیم.


برای مطالعه بیشترروی توابع grouping/manipulating در کالکشن ها می توانید داکیومنت رسمی لاراول را مطالعه کنید.

کامنت ها (0)

ارسال نظر