2013-11-27 4 views
7

Существует запрос я использую для работы в MySQL:Laravel 4, красноречивый - между высказыванием и операторами

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

Он отлично работает, но с Laravel 4, единственный способ сделать этот запрос должен иметь что-то как

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

Таким образом, кажется, не работает, потому что у меня нет такого же результата при использовании обычного «выберите * ...»

Любая идея?

Просто чтобы прояснить мою просьбу: В моем случае я не имею»... где колонка между значению1 и значение2" , но„где значение между коммун“ Так что, мне кажется, что я не могу использовать„wherebetween“

+0

Посмотрите это сообщение на форумах Laravel: http://forums.laravel.io/viewtopic.php?pid=46789#p46789 –

ответ

9

Это должно сделать это ...

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

Я думаю, что это довольно безопасно, но вам может понадобиться очистить $val первый.

+0

Разве laravel очищает это для вас? – Rafael

+2

@Rafael, @ user1669496, Laravel ничего не делает для переменной. Вам нужно вызвать так: '$ results = my_model :: select ('*') -> whereRaw ("? Между col1 и coL2 ", ['someValue']) -> get();' для безопасного запроса. – DuckPuncher

32

Вы можете попробовать что-то вроде этого

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

Или с помощью переменной

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

Это получит все записи чьи ID между 1 и 5.

+0

Спасибо, что ответили. Проблема в моем случае заключается в том, что входные данные в моем запросе должны быть между столбцами. –

+0

Я не понял, не могли бы вы быть более наглядными? –

+3

@ WereWolf-TheAlpha вы жестко кодируете «между» значениями 'array (3,6)', но ему нужно выбрать между двумя столбцами в таблице - 'SELECT * FROM table WHERE $ wishValue BETWEEN col1 AND col2 ' – Prefix

0

Без создания MySQL модели, мы можем генерировать запрос типа:

// 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

Ваш красноречивый пример использования, где() не работает, потому что у вас есть операторы сравнения обращены вспять. Если вы хотите, чтобы получить строки, где Вэл между col1 и col2, это должно быть так:

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

Примечание операторы сравнения перепутаны сказать «Допустимы больше или равно col1 и Допустимы меньше или равно col2. "

Возможно, вам придется немного прищуриться, чтобы это увидеть. :)

Смежные вопросы