我正在Laravel 5.6中创建一个预订系统,通过该表格我可以获取预订详细信息和重复要求,通常是每周进行2年以上的预订(重复100次以上),然后我希望它返回每个日期可用房间列表。到目前为止,在该应用程序中,我可以生成重复项,并且可以为单个预订找到空房间,但是我想要一种有效的方法来查询可用房间的多个预订,而不必为每个重复性都进行一次查询。这可能吗?
房间空房查询:
$AvailableRooms = Derpartment::where('id', $DepartmentID)->with(['Rooms' => function($Rooms) use ($StartTime, $EndTime)
{
$Rooms->whereDoesntHave('Clinics', function ($Clinics) use ($StartTime, $EndTime) {
$Clinics->where(function($q) use ($StartTime, $EndTime)
{
$q->where( function($r) use ($StartTime, $EndTime)
{
// Req Start before or equal to booked start & Req End is before booked End time
$r->where('StartTime', '>=', $StartTime);
$r->where('StartTime', '<', $EndTime);
});
$q->where( function($r)
{
$r->where('ClinicStatus', '=', 1);
$r->orWhere('ClinicStatus', '=', 2);
$r->orWhere('ClinicStatus', '=', 4);
});
});
$Clinics->orWhere(function($q) use ($StartTime, $EndTime)
{
$q->where( function($r) use ($StartTime, $EndTime)
{
// Req Start is before booked end & Req End is after booked end
$r->where('EndTime', '>', $StartTime);
$r->where('EndTime', '<=', $EndTime);
});
$q->where( function($r)
{
$r->where('ClinicStatus', '=', 1);
$r->orWhere('ClinicStatus', '=', 2);
$r->orWhere('ClinicStatus', '=', 4);
});
});
$Clinics->orWhere(function($q) use ($StartTime, $EndTime)
{
$q->where( function($r) use ($StartTime, $EndTime)
{
// Req Start equal or greater than Booked Start & Req End is
$r->where('StartTime', '<=', $StartTime);
$r->where('EndTime', ">=", $EndTime);
});
$q->where( function($r)
{
$r->where('ClinicStatus', '=', 1);
$r->orWhere('ClinicStatus', '=', 2);
$r->orWhere('ClinicStatus', '=', 4);
});
});
});
}])->get();
ClinicStatus是我确定是否应包括诊所的方式(例如,数据库中的其他预订已取消)
使用SimShaun's Recurr完成重复生成器,从中我得到一个日期数组。