2013-11-27 18 views
7

C'è una domanda che uso per l'esecuzione in mysql:laravel 4, eloquente - tra la dichiarazione e gli operatori

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

Funziona benissimo, ma con laravel 4, l'unico modo per fare quella domanda è di avere qualcosa come

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

In questo modo non sembra funzionare, perché non ho lo stesso risultato quando si utilizza il solito "select * ..."

Qualche idea?

Giusto per chiarire la mia richiesta: Nel mio caso io non hanno" ... dove la colonna tra value1 e value2" , ma 'dove il valore tra commun' Così sembra a me che non posso usare 'wherebetween'

+0

Guarda questo post sui forum di Laravel: http://forums.laravel.io/viewtopic.php?pid=46789#p46789 –

risposta

9

Questo dovrebbe farlo ...

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

Penso che questo sia abbastanza sicuro, ma potrebbe essere necessario per pulire $val prima.

+0

Laravel pulisce questo per te? – Rafael

+2

@Rafael, @ user1669496, Laravel non fa nulla alla variabile. Devi chiamare così: '$ results = my_model :: select ('*') -> whereRaw ("? Between col1 and coL2 ", ['someValue']) -> get();' per una query sicura. – DuckPuncher

32

si può provare qualcosa di simile

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

o utilizzando variabile

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

In questo modo ottenere tutti i record di cui ID tra 1 e 5.

+0

Grazie per la risposta. Il problema nel mio caso è che i dati di input nella mia query devono essere tra le colonne. –

+0

Non ho capito, puoi essere più descrittivo? –

+3

@ WereWolf-TheAlpha stai hard-coding il "between" valori 'array (3,6)', ma ha bisogno di selezionare tra 2 colonne nella tabella - 'SELECT * FROM table WHERE $ desiredValue BETWEEN col1 AND col2 ' – Prefix

0

Senza la creazione di MySQL modello, possiamo generare interrogazione come:

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

Il vostro esempio eloquente usando dove() non ha funzionato perché avete gli operatori di confronto invertiti. Se si desidera recuperare le righe in cui val è tra col1 e col2, dovrebbe essere simile a questo:

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

Avviso gli operatori di confronto sono invertiti a dire "dove val è maggiore o uguale a col1 e val è inferiore a o uguale a col2. "

Potrebbe essere necessario strizzare gli occhi un po 'per vederlo. :)

Problemi correlati