php - Laravel 中需要等效(不存在)whereHour 命令

标签 php mysql laravel-5 eloquent

我使用以下 SQL 查询返回一组数据(即将到来的 session ):

SELECT * FROM availabilities 
WHERE 
name = "Booked"
and 
start_time >= (DATE_ADD(NOW(), INTERVAL 1 DAY))
and
DAY(start_time) >= (DAY(DATE_ADD(NOW(), INTERVAL 1 DAY)))
and
HOUR(start_time) = (HOUR(DATE_ADD(NOW(), INTERVAL 1 DAY)));

这会返回我需要的数据(提前 24 小时即将举行的 session ),但我正在努力将其转换为可以在 Laravel 中返​​回相同数据的格式(使用 5.3)。

我以此为起点:

$UpcomingSessions = Availability::where('name', '=', 'booked')
->where("start_time",">=", '(DATE_ADD(NOW(), INTERVAL 1 DAY))')
->whereDay("start_time",">=", '(DAY(DATE_ADD(NOW(), INTERVAL 1 DAY)))')
->where("start_time",">=", '(DATE_SUB(NOW(),INTERVAL 1 HOUR))')
->get();

但无法弄清楚如何处理小时部分,因为没有

whereHour 

在 Laravel 中。

如果我尝试:

->where("HOUR(start_time)",">=", '(HOUR(DATE_ADD(NOW(), INTERVAL 1 DAY)))')

我收到以下消息:

未找到列:1054 “where 子句”中存在未知列“HOUR(start_time)”

是否有一个等效的 whereHour 命令可供我使用?任何有关如何正确格式化 SQL 的想法都很棒!

最佳答案

这里是 Laravel 8.x。

在文档中,有一个 whereTime() 函数。

$users = DB::table('users')
            ->whereTime('created_at', '=', '11:20:45')
            ->get();

作为第二个参数给出的值可以是任何格式化字符串。例如,您可以将范围缩小到 2 个 whereTime() 调用:

$users = DB::table('users')
            ->whereTime('created_at', '>=', '11:00:00')
            ->whereTime('created_at', '<', '12:00:00')
            ->get();

关于php - Laravel 中需要等效(不存在)whereHour 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57650317/

相关文章:

firebase - 使用 firebase 访问谷歌云数据存储数据

php - 如何使用正则表达式从字符串中提取值。(PHP)

Jquery 数据表和 Mysql 错误 : The value of the search cannot be null. 如果没有执行搜索,请提供一个空字符串。

php - 使用 javascript/jquery 选择用户已检查的所有收件箱消息

mysql 在运行 docker Composer - Node js 时出现错误

Laravel 5.1 失败的排队作业在 failed() 方法上失败,阻止调用队列失败事件处理程序

php curl_exec 返回空

php - set_time_limit 不影响 PHP-CLI

php - 使用 PHP Response 来存储/使用数据

laravel - 如何在另一个成功的命令后在 Laravel 内核中运行命令