我正在尝试以下方法:
我有一个函数,只有当酒吧在当前时刻打开时才返回,
/**
* @param $pubs
* @return mixed
*/
public static function isPubCurrentlyOpen($pubs)
{
$pubs->whereHas('pubSchedules', function ($pubs) {
$pubs->where('week_day', Carbon::now()->dayOfWeek)
->whereRaw(
"'" . Carbon::now('Europe/Madrid')->format("H:i:s") . "' BETWEEN opening_time AND closing_time"
);
} );
return $pubs;
}
我遇到的问题是,当一些酒吧在00:00之后关门(这将是“第二天”),所以如果我使用这个功能,即18:00:00,它不会返回这些酒吧。
那么,有没有办法在我之前写的查询语句中实现这一点(再设置一天关闭时间)
if($openingTime>$closingTime)
{
$closingTime = Carbon::now('Europe/Madrid')->setTimeFromTimeString($schedule->closing_time)->addDay(1);
}
谢谢!!
1条答案
按热度按时间m4pnthwp1#
这里的想法,你可能想创建一个mysql视图,使事情更容易为你。当然,这不是很准确;这是基于你的问题中给出的一些假设。
这将生成一个名为
opening_datetime
&closing_datetime
创建mysql视图后,您可以正常比较,而不必使用工作日,因为您将有2个完整的日期/时间进行比较。更新
您的最终查询应该是这样的(保留我在select中提供的数据)