2016-01-22 19 views
8

Dưới đây là một đoạn trích từ tài liệu Laravel:SQL giữa hai cột trong Laravel/Lumen

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ị:

$users = DB::table('users')->whereBetween('votes', [1, 100])->get();

Nhưng nếu tôi muốn tìm hiểu xem liệu giá trị có nằm giữa hai cột trong cơ sở dữ liệu của tôi không?

Đây là SQL liệu của tôi:

SELECT a.*, b.name FROM restaurants a, restaurant_class b 
WHERE a.restaurant_class_id = b.id 
AND '$d' = CURRENT_DATE 
AND '$t' BETWEEN a.saturday_ot AND a.saturday_ct 
ORDER BY id DESC 

saturday_otsaturday_ctTIME cột trong bảng của tôi và $t là một biến thời gian. Vì vậy, tôi muốn kiểm tra xem thời gian nằm giữa các lần trong cả hai cột.

+1

tôi nghĩ rằng bạn phải sử dụng phương pháp whereRaw –

Trả lời

17

Không có phương pháp thay thế cho phương pháp whereBetween áp dụng cho hai cột. Tuy nhiên bạn có thể làm điều này bằng một trong hai cách sau:

1. Sử dụng whereRaw với bindings, nơi bạn sử dụng các điều kiện sống và một ràng buộc cho biến:

whereRaw('? between saturday_ot and saturday_ct', [$t]) 

2. Dùng where với hai điều kiện sử dụng các giá trị hai cột như ranh giới cho $t giá trị biến:

where(function ($query) use ($t) { 
    $query->where('saturday_ot', '<=', $t); 
    $query->where('saturday_ct', '>=', $t); 
}) 
Các vấn đề liên quan