2013-11-27 16 views
7

Có một truy vấn tôi sử dụng để chạy trong mysql:Laravel 4, hùng hồn - giữa tuyên bố và các nhà khai thác

select * from my_table where $val between col1 and coL2; 

Nó hoạt động tốt, nhưng với laravel 4, cách duy nhất để thực hiện truy vấn mà là phải có một cái gì đó như

my_model::where('col1','>=',$val)->where('col2','<=',$val) 

bằng cách này dường như không làm việc, bởi vì tôi không có kết quả tương tự khi sử dụng bình thường "chọn * ..."

Bất kỳ ý tưởng?

Chỉ cần làm rõ yêu cầu của tôi: Trong trường hợp của tôi, tôi không có "... trong đó cột giữa value1 và value2" nhưng "giá trị giữa cộng" Vì vậy, có vẻ như tôi không thể sử dụng "wherebetween"

+0

Hãy xem bài đăng này trên diễn đàn Laravel: http://forums.laravel.io/viewtopic.php?pid=46789#p46789 –

Trả lời

9

này nên làm điều đó ...

$results = my_model::select('*')->whereRaw("$val between col1 and coL2")->get();

Tôi nghĩ rằng đây là khá an toàn, nhưng bạn có thể cần để làm sạch $val đầu tiên.

+0

Laravel có làm sạch điều này cho bạn không? – Rafael

+2

@Rafael, @ user1669496, Laravel không làm bất cứ điều gì với biến. Bạn cần gọi như thế này: '$ results = my_model :: select ('*') -> whereRaw ("? Giữa col1 và coL2 ", ['someValue']) -> get();' cho truy vấn an toàn. – DuckPuncher

32

Bạn có thể thử một cái gì đó như thế này

// Get records whose id between 3 and 6 
$users = User::whereBetween('id', array(3, 6))->get(); 

Hoặc sử dụng biến

$id = 'id'; 
$from = 1; 
$to = 5; 
$users = User::whereBetween($id, array($from, $to))->get(); 

này sẽ nhận được tất cả các hồ sơ có ID giữa 15.

+0

Cảm ơn bạn đã trả lời. Các problème trong trường hợp của tôi là dữ liệu đầu vào trong truy vấn của tôi phải nằm giữa các cột. –

+0

Tôi không hiểu, bạn có thể mô tả chi tiết hơn không? –

+3

@ WereWolf-TheAlpha bạn đang mã hóa cứng các giá trị "giữa" giá trị 'mảng (3,6)', nhưng anh ta cần phải chọn giữa 2 cột trong bảng - 'SELECT * FROM table WHERE $ mongValue BETWEEN col1 AND col2 ' – Prefix

0

Nếu không tạo MySQL Model, chúng ta có thể tạo ra truy vấn như:

// If column value need to checked between value 1 and value 2 
$DBConnection->table('users')->whereBetween('id', array(3, 6))->get(); 

// If value need to checked between column 1 and column 2 value 
$DBConnection->->table('users')->whereRaw("$val between col1 and col2")->get(); 
0

dụ hùng hồn của bạn sử dụng ở đâu() không làm việc vì bạn có toán tử so sánh đảo ngược. Nếu bạn muốn lấy hàng nơi val là giữa col1 và col2, nó phải là như thế này:

my_model::where('col1','<=',$val)->where('col2','>=',$val) 

Thông báo các nhà khai thác so sánh được đảo ngược để nói "nơi val là lớn hơn hoặc bằng col1 và val là ít hơn hoặc bằng col2. "

Bạn có thể phải nheo mắt một chút để thấy nó. :)

Các vấn đề liên quan