php - php如何使用 Laravel 和Eloquent的ORM在两个日期之间进行查询?

  显示原文与译文双语对照的内容
87 4

我试图创建一个报表页,其中显示某个特定日期到某个特定日期的报表。以下是我的当前代码:

$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', $now)->get();

这在纯SQL中里是select * from table where reservation_from = $now

这里有这个查询,但是我不知道如何将它转换为eloquent的查询。

SELECT * FROM table WHERE reservation_from BETWEEN '$from' AND '$to

如何将上面的代码转换为eloquent的查询?先谢谢您了。

时间:原作者:0个回答

54 5

whereBetween 方法验证列的值是否在两个值之间。

$from = date('2018-01-01');
$to = date('2018-05-02');
Reservation::whereBetween('reservation_from', [$from, $to])->get();

在某些情况下,你需要动态添加日期范围。

Reservation::all()->filter(function($item) {
 if (Carbon::now->between($item->from, $item->to) {
 return $item;
 }
});

如果你想添加更多条件,那么你可以使用 orWhereBetween如果你想排除日期间隔,那么你可以使用 whereNotBetween

Reservation::whereBetween('reservation_from', [$from1, $to1])
 ->orWhereBetween('reservation_to', [$from2, $to2])
 ->whereNotBetween('reservation_to', [$from3, $to3])
 ->get();

其他有用的where子句 whereInwhereNotInwhereNullwhereNotNullwhereDatewhereMonthwhereDaywhereYearwhereTimewhereColumnwhereExistswhereRaw

Laravel 文档关于子句的位置。

原作者:
65 0

以下各项应该适用:

$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', '>=', $now)
 ->where('reservation_from', '<=', $to)
 ->get();
原作者:
57 0

如果你的字段是 datetime 而不是 date ( 虽然这两种情况都适用),则为另一个选项:

$fromDate ="2016-10-01";
$toDate ="2016-10-31";
$reservations = Reservation::whereRaw("reservation_from> =? AND reservation_from <=?", 
 array($fromDate." 00:00:00", $toDate." 23:59:59")
)->get();
原作者:
...