其中在拉拉维尔的两列之间在拉拉维尔的两个时间柱上



>基本上我有一个项目,在这个项目中,我必须为任何内容创建一个预订,例如计算机在网络商店的预订,所以假设一个用户的预订开始时间是下午 6:00 到晚上 7:00。我有两列来存储名为 start_time 和 end_time 的开始和结束时间。假设第二个用户来了并为下午 6:30 到 7:30 创建预订,然后此用户收到提示,提示计算机在此时间之间预订,第三个方案将从下午 5:30 到下午 6:30 进行预订,第四个方案将是下午 06:30 到 06:45 ,第 4 种方案将是下午 5:00 到晚上 8:00。简单地说,如果start_time或end_time位于任何预订之间,那么我必须提示错误。我无法进行相同的验证。

我想我有一个解决方案,您必须在其中接收请求并使用 eloquent,但首先您必须考虑到,为了使它工作并返回数据,您必须以 00:00:00 格式发送时间数据。

public function getReservations(Request $request){
$startTime = $request->start_time; //something like '18:30:00'
$endTime = $request->end_time; //something like '19:30:00'
$date = $request->date; //your date consulting '2020-07-02'

$reservations = YourModelHere::select('date', 'start_time', 'end_time')
->whereDate('date', $date)
->where(function ($query) use ($startTime, $endTime){
$query->where(function ($query) use ($startTime, $endTime){
$query->whereTime('start_time', '>=', $startTime)->whereTime('start_time', '<', $endTime);
//You search if any data in your column is between in the $startTime and $endTime
})
->orWhere(function ($query) use ($startTime, $endTime){
$query->whereTime('end_time', '>', $startTime)->whereTime('end_time', '<=', $endTime);
//You search if any data in your column is between in the $startTime and $endTime
});
})
->first(); //if you only want get one reservation
//->get();   if you want get n reservations
}

通过这种方式,您可以确保每次定义时都会查找两列中的任何一列中的任何数据是否在您接收的时间之间。 查看 laravel 文档 这是我第一次回答问题,所以我希望我已经解释了自己,并且它会对你有所帮助。

whereBetween('start_time', [date('h:i A', strtotime($request->start_time)), date('h:i A', strtotime($request->end_time))])
->orwhereBetween('end_time', [date('h:i A', strtotime($request->start_time)), date('h:i A', strtotime($request->end_time))])
->orWhere('start_time', '<=', date('h:i A', strtotime($request->start_time)))
->Where('end_time', '>=', date('h:i A', strtotime($request->end_time)))->count();

最新更新