首页 > 解决方案 > 如何为这个普通的 SQL 查询编写 Laravel 雄辩的查询(内部查询)

问题描述

SELECT *
FROM (
        SELECT *
        FROM appointments
        WHERE `date` <= Curdate()
) `t`
WHERE `t`.`end_time` <= current_time

如何为这个 SQL 查询编写一个 Laravel的等效查询?

标签: laraveleloquent

解决方案


如果要查询:

  • 所有过去的约会(从开始到昨天,基于date字段)+
  • 今天所有今天end_time没有过去(或现在)的约会

假设您有合适的appointment表格模型,您可以尝试以下操作:

Appointments::where('appointments.date', '<', Carbon::now()->toDateString())
    ->orWhere(function ($query) {
        $query->where('appointments.date', Carbon::now()->toDateString())
              ->where('appointments.end_time', '<=', Carbon::now()->toTimeString());
    });

您可能需要测试where子句中使用的 Carbon 格式,以确保它与您的数据库存储格式匹配,并且查询返回预期结果。


推荐阅读