2015-10-27 22 views
13

Tôi đang tạo trang báo cáo và những gì tôi muốn làm là hiển thị báo cáo từ ngày cụ thể đến ngày cụ thể. Mã hiện tại của tôi là:Phạm vi ngày phổ biến Laravel - Truy vấn giữa hai ngày

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

Điều này có nghĩa là select * from table where reservation_from = $now. Tôi có một truy vấn ở đây nhưng tôi không biết làm thế nào để chuyển nó thành truy vấn hùng hồn. Đây là mã của tôi:

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

Làm cách nào để chuyển đổi mã về truy vấn hùng hồn? Cảm ơn bạn trước.

+0

định dạng ngày trong 'reservation_from' là gì. bạn có thể sử dụng các giá trị Carbon dựa trên đó. –

+0

định dạng ngày là TIMESTAMP @AthiKrishnan – FewFlyBy

+2

nó sẽ giống như, 'Đặt chỗ :: ở đâu (' reservation_from ','> = ', Carbon :: createFromDate (1975, 5, 21);) -> where (' reservation_from ', '<=', Carbon :: createFromDate (2015, 5, 21);) -> get() '; –

Trả lời

29

Phương pháp whereBetween xác nhận rằng giá trị của một cột là giữa hai giá trị.

Hãy thử:

$reservations = Reservation::whereBetween('reservation_from', [$from, $to])->get(); 

Nếu bạn muốn thêm điều kiện hơn, bạn có thể sử dụng orWhereBetween.

$reservations = Reservation::whereBetween('reservation_from', [$from_from, $to_from]) 
       ->orWhereBetween('reservation_to', [$from_to, $to_to]) 
       ->get(); 

Bạn nên biết về: whereNotBetween, whereIn, whereNotIn, whereNull, whereNotNull

Laravel docs about where.

2

Sau đây nên làm việc:

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

Hãy thử điều này:

Vì bạn đang tìm nạp dựa trên một giá trị cột duy nhất bạn có thể đơn giản hóa truy vấn của bạn tương tự như vậy:

$reservations = Reservation::whereBetween('reservation_from', array($from, $to))->get(); 

Truy xuất dựa trên điều kiện: laravel docs

Hy vọng điều này sẽ hữu ích.

2

Một lựa chọn khác nếu trường của bạn là datetime thay vì date (mặc dù nó làm việc cho cả hai trường hợp):

$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(); 
Các vấn đề liên quan