查询开放时间,深夜在Laravel

时间:2018-02-20 10:23:23

标签: php mysql laravel

我有一个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

1 个答案:

答案 0 :(得分:0)

如果我正确读到这一点,关闭时间将始终是第二天最早发现的时间,因此只需花费第二天的时间,排序并获取第一条记录就可以获得结束时间:

public function scopeCloses($query)
{
    $nextDayOfWeek = now()->addDay()->dayOfWeek;

    $hours= $this->openinghours->where('day_id', $nextDayOfWeek)
                               ->sortBy('closes')
                               ->first();
    return $hours->closes;
}