Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 雄辩/DB两个日期之间有个月_Sql_Laravel_Date - Fatal编程技术网

Sql 雄辩/DB两个日期之间有个月

Sql 雄辩/DB两个日期之间有个月,sql,laravel,date,Sql,Laravel,Date,我用的是Laravel 5.4 我有一个包含开始日期和结束日期的预订模型。用户从下拉列表中选择月份 我想雄辩地返回所有记录,其中月份介于开始日期和结束日期之间 e、 g显示9月份的所有预订,即使预订在9月份之前或期间开始,并在9月份或之后结束 欢迎提出任何建议。如果需要,很高兴这是一条原始SQL语句。首先,在客户端或服务器端,将用户选择的月份解析为如下内容: $selected = "2017-09"; 然后: 这似乎有效: $bookings = DB::table('bookings')

我用的是Laravel 5.4

我有一个包含开始日期和结束日期的预订模型。用户从下拉列表中选择月份

我想雄辩地返回所有记录,其中月份介于开始日期和结束日期之间

e、 g显示9月份的所有预订,即使预订在9月份之前或期间开始,并在9月份或之后结束


欢迎提出任何建议。如果需要,很高兴这是一条原始SQL语句。

首先,在客户端或服务器端,将用户选择的月份解析为如下内容:

$selected = "2017-09";
然后:

这似乎有效:

$bookings = DB::table('bookings')
            ->whereMonth('start_date', '<', $date->month)->whereMonth('end_date', '>=', $date->month)
            ->orWhere(function($query) use ($date) {
                $query->whereMonth('start_date', $date->month);
            })->get();

这就是我的工作原理:

$start = Carbon::now()->addMonth(-1);
$end = Carbon::now()->addMonth();

$bookings = Booking::whereRaw('MONTH(created_at) > :0 AND MONTH(created_at) < :1',[
    $start->month, $end->month
])
->orWhereRaw('MONTH(created_at) = :3 AND DAYOFMONTH(created_at) >= :4', [ 
    $start->month, $start->day
])
->orWhereRaw('MONTH(created_at) = :5 AND DAYOFMONTH(created_at) <= :6', [
    $end->month, $end->day
])
->get();

如果要排除开始日期和结束日期,可以将>=替换为>,应该非常简单

我不确定月份的格式,但您应该使用DateTime::createFromFormat来获取DateTime对象。如果您熟悉,请随意使用碳。我发现对于这样简单的事情,它增加了不必要的复杂性

然后使用它进行查询

Booking::whereBetween($dateTime->format('Y-m-00'), [DB::raw('start_date'), DB::raw('end_date')])->get();

这对你有帮助,或者这就是你尝试过的?我来看看-干杯!!谢谢你的帮助-我以后再玩这个!绝妙的。谢谢。@Ows如果这篇文章回答了您的问题,请您将其标记为已接受:谢谢。
Booking::whereBetween($dateTime->format('Y-m-00'), [DB::raw('start_date'), DB::raw('end_date')])->get();