如何使用laravel查询查找可用日期?

时间:2019-06-30 15:27:11

标签: laravel

我有多个大厅。我必须搜索大厅,以提供给定的日期和时间。我如何使用laravel查询从数据中查找可用日期。

            $getData = Booking::where('category_id', '=', $categoryID)->
                    where('booking_time', '=', $time)
                ->whereDate('date_from', '>=', $startDate)
                ->whereDate('date_to', '<=', $endDate)
                ->get();

1 个答案:

答案 0 :(得分:0)

为了知道可用日期,您需要1)考虑日期范围,以及2)不可用日期。然后比较一下。

您可以在数据库中创建一个日历表,其中存储下一个x年的所有日期,然后将其与您的预订进行比较。或者,您可以在PHP中这样做,例如:

$availableDates['morning'] = iterator_to_array(new DatePeriod(
     new DateTime('2019-01-01'),
     new DateInterval('P1D'),
     new DateTime('2019-12-31')
));

$availableDates['afternoon'] = $availableDates['morning'];

$unavailableDates = [];

foreach(Booking::where('category_id', $category_id)->get() as $booking) {

    $unavailableDates[$booking->booking_time] += iterator_to_array(new DatePeriod(
         new DateTime($booking->date_from),
         new DateInterval('P1D'),
         new DateTime($booking->date_to)
    ));

}

 function compareDates(DateTime $a, DateTime $b) { return $a->getTimestamp() - $b->getTimestamp(); }

 $available['morning'] = array_udiff($availableDates['morning'],$unavailableDates,'compareDates');

 $available['afternoon'] = array_udiff($availableDates['afternoon'],$unavailableDates,'compareDates');

通过消除几个循环可能会获得一些效率,但这应该可以帮助您入门。