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的查询? 先谢谢您了。

时间:

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();



原作者:
...