mysql - 在查询中使用碳时出错
问题描述
我在 mysql 中使用 if 条件时遇到问题
我正在尝试以下操作:
我有两个模型:Pubs 和 Schedules(我在其中静态存储 pubs 时间表)。它们相互关联如下:
酒馆:
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function pubSchedules()
{
return $this->hasMany( Schedule::class );
}
日程:
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function pub()
{
return $this->belongsTo(Pub::class);
}
表计划具有以下字段:
编号| pub_id | 工作日 | 开放时间 | 关闭时间
我正在开发一个过滤器,只显示当前打开的酒吧。
我制作的第一个功能完美运行:
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
"
);
} );
}
它返回一个可以与其他过滤器连接的查询。
问题是当我有一个具有这种时间表的酒吧时:同一天的 09:00 - 03:00。当然 03:00 是在第二天,但我们选择这种可能性是为了让客户更容易存储时间表。
好吧,在这个例子中,它使得 "Carbon::now('Europe/Madrid')->format("H:i:s")" 不在 opening_time 和 closing_time 之间,所以这个 pub 它不会显示为打开(几时)。
在 MySql 上进行一些测试我尝试了这样的事情:
SELECT *,
CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', `week_day`, ' ',
`opening_time`) AS `opening_datetime`,
IF(`closing_time` < `opening_time`,
CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', `week_day` + 1, ' ',
`closing_time`),
CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', `week_day`, ' ',
`closing_time`)
) AS `closing_datetime`
FROM tappear_borrador.schedules
;
当它大于 00:00 时,它可以完美地将“多一天”设置为 close_time,但是我在我的函数中设置它时遇到问题:
$pubs->whereHas('pubSchedules', function ($pubs) {
$pubs->where('week_day', Carbon::now()->dayOfWeek)
->whereRaw(
"'" . Carbon::now('Europe/Madrid')->format('Y-m-d H:i:s') .
"' BETWEEN CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', ".Carbon::now()->dayOfWeek.", ' ', opening_time)
AND IF(closing_time < opening_time,
CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', ".Carbon::now()->dayOfWeek." + 1, ' ', closing_time),
CONCAT(YEAR(NOW()), '-', MONTH(NOW()), '-', ".Carbon::now()->dayOfWeek.", ' ', closing_time)
)
"
);
} );
这我让它没有返回任何东西(也有任何错误)。(((我还检查了 json_die(Carbon::now()->dayOfWeek+1) 没有返回一个更多的值到当天......这可能是问题之一吗?)),
检查更改的当前时刻以将年/月/h:i:s 与打开和关闭时间进行比较。
所以朋友们:我需要你的帮助来改进我的最后一个代码,如果关闭时间<打开时间,关闭时间将在第二天,然后比较当前时刻是否在之间。
有任何想法吗?非常感谢
解决方案
推荐阅读
- h.264 - 关于 h.264 sps、pps
- python - 如何删除所有定义的 SymPy 符号而不明确列出它们?
- node.js - 节点模块持续构建
- c++ - 为什么这个 C++ 程序在 Code::Blocks 和在线 IDE 之间返回不同的结果?
- json - 获取 AJAX 以使用从烧瓶发送的 JSON 数据填充 Datatables 并单独呈现 html
- android - 按钮后的定时通知——Android Studio
- java - 在 ConstraintLayout 中的视图的所有方向上应用约束是最佳做法吗?
- python-3.x - 如果 Python 中的 Else 无法使用用户输入
- java - import utility.* 和只需要在 Android 中获得乐趣有什么区别?
- angular - 无法读取 null 的属性“选定”