如何使用laravel查询获取两个日期之间的所有行?

问题描述

我正在为酒店预订系统,在该系统中,用户输入入住和退房日期,然后他找到该时期内所有可用的酒店和客房,与此同时,我在后端设置了合同,在合同中我分别确定了在特定时期内的房间。

数据库查询包括在此期间内有效的每份合同,并且此期间的每一天都应包含在合同中。

带有合同查询的酒店

Hotel::with(["contracts" => function($query) use($from,$to,$columns) {
    $query->select(
    "contracts.*",DB::raw("SUM(contract_rooms.we_price) as total_we_price"),DB::raw("SUM(contract_rooms.wd_price) as total_wd_price"))
        ->whereBetween("contracts.to_time",[$from,$to])
        ->orWhereBetween("contracts.from_time",$to])
        ->orWhere(function ($query) use ($from,$to){
            $query->where("contracts.from_time","<",$from)
                ->where("contracts.to_time",">",$to);
        })
        ->join("contract_rooms","contracts.id","=","contract_rooms.contract_id")
        ->groupBy("contract_rooms.view_id","contract_rooms.meal_id","contracts.room_type_id")
        ->orderBy("contract_rooms.wd_price","ASC");
            },"reviews"])
        ->whereHas("contracts",function ($query) use ($from,$to) {
            $query->whereBetween("contracts.to_time",$to])
                ->orWhereBetween("contracts.from_time",$to])
                ->where(function ($query) use ($from,$to) {
                    $query->where("contracts.from_time",$from)
                        ->where("contracts.to_time",$to);
                    });
                });

酒店表:

+------------------+-----------+-------------+
| id | hotel_name  | city_id   | description |
+----+-------------+-----------+-------------+
|  1 |  Hilton     | 1         | Text        |
|  2 |  Sheraton   | 1         | Text        |
|  3 |  Aston      | 1         | Text        |
+----+-------------+-----------+-------------+ 

RoomType表:

+--------------+-----------+------+
| id | name    | room_size | beds |
+----+---------+-----------+------+
|  1 |  text   | 0         | 2    |
|  2 |  text   | 1         | 2    |
|  3 |  text   | 0         | 2    |
+--------------+-----------+------+ 

合同表:

+-------------+-----------+--------------+------------+-------------+
| id | name   | hotel_id  | room_type_id | from_time  | to_time     |
+----+--------+-----------+--------------+------------+-------------+
|  1 | text   | 1         | 1            | 2020-10-14 |  2020-10-20 |
|  2 | text   | 1         | 1            | 2020-10-21 |  2020-10-30 |
|  3 | text   | 1         | 1            | 2020-11-05 |  2020-11-20 |
+----+--------+-----------+--------------+------------+-------------+

例如:

  • 如果用户输入的日期介于14/10/2020和30/10/2020之间,则他将获得前2行。
  • 如果用户在2020年10月14日至2020年11月14日之间输入两个日期,他将一无所获。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...