我有一个Openinghours表,我想通过查询来获得一个位置的结束时间。
这是一个OpeningHoursTable和我的代码当前查询代码的一个实例,它不起作用,但你可能会得到一个想法...
例如day_id = 3,
营业时间为11:30至14:30。从第二天的17:30到00:00。
我想输出第4天的0000
我该如何查询?
数据库条目:
location_id | day_id | opened | closed
81 1 1130 1430
81 1 1730
81 2 0000
81 3 1130 1430
81 3 1730
81 4 0000
81 4 1130 1430
81 4 1730
81 5 0000
81 5 1130 1430
81 5 1730
81 6 0000
81 6 1130 1430
81 6 1730
81 7 0000
81 7 1130 1430
81 7 1730
81 1 0000
我对Location.php中代码的“想法”:
public function closesTodayAt($closeTo = 2000)
{
$thisDay = today()->dayOfWeek + 1;
$time = $this->openinghours()->where('day_id', $thisDay)->where('closed','!=', "")
orWhere()->get();
if ($time->first()->closed < $closeTo ) {
#code
}
if ($time < $closeTo ) {
$nextDay = today()->addDay(1)->dayOfWeek +1;
$time = $this->openinghours()->where('day_id', $thisDay)->where('opened','!=',"")->first()->opened;
}
if ($time === "0000") {
# code...
}
$time = str_split($time,2);
$time = implode(":", $time);
return $time;
}
这是数据库的另一部分:
94 1 1100
94 2 0100
94 2 1100
94 3 0100
94 3 1100
94 4 0100
94 4 1100
94 5 0100
94 5 1100
94 6 0200
94 6 1100
94 7 0400
94 7 1100
94 1 0400
答案 0 :(得分:0)
如果我正确读到这一点,关闭时间将始终是第二天最早发现的时间,因此只需花费第二天的时间,排序并获取第一条记录就可以获得结束时间:
public function scopeCloses($query)
{
$nextDayOfWeek = now()->addDay()->dayOfWeek;
$hours= $this->openinghours->where('day_id', $nextDayOfWeek)
->sortBy('closes')
->first();
return $hours->closes;
}